我正在使用EnterpriseLibrary.Data.DatabaseProviderFactory,3.5 / C#,我面临的问题是,我需要能够加密和解密一个.config文件,该文件保存了所有的数据库连接,以便与问题末尾所示的.config一起使用。这种加密和解密是自定义的,是用已知的密钥完成的,必须对每台机器都是相同的,因此我没有使用ProtectSection。
我试图读取一个加密的configurationSetings.config文件,在内存中解密该文件,并将该文件的解密内容传递给DatabaseProviderFactory,以便它能够访问数据库连接设置。
目前,我正在使用MS企业库(v2) DatabaseProviderFactory (非加密配置文件)与FileConfigurationSource类相结合,查看App.config文件的名称,在该文件中存储数据库连接设置。
然后我使用将ConnectionSettings文件的路径传递给FileConfigurationSource,然后将结果传递给DatabaseProviderFactory,这允许我创建一个数据库实例。
我不想将未加密的文件写入文件系统并将其读取回来。我正在寻找使用隔离存储的选项,但据我所知,您无法获得使用隔离存储创建的文件的直接路径。
也许有一种方法可以创建自定义ConfigurationSource,或者允许我将解密后的内容直接传递到DatabaseProviderFactory中,以便创建数据库实例。
因此,本质上,我需要读取一个加密的configurationSetings.config文件,在内存中解密该文件,并将该文件的解密内容传递给DatabaseProviderFactory,以便它能够访问数据库连接设置,或者类似的内容,以便我可以映射到configurationSetings.config。
如有任何代码和/或建议,将不胜感激。
提前谢谢。
戴夫
APP.CONFIG
<enterpriseLibrary.ConfigurationSource selectedSource="fileSource">
<sources>
<add
name="fileSource"
type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b"
filePath ="ConnectionSettings.config" />
<add
name="systemSource"
type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b8b89dc1061d43b" />
</sources>
</enterpriseLibrary.ConfigurationSource>方法代码:
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource fileConfig =
new Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource(connectionSettingsConfigFile);
Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory dbProvider =
new Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory(fileConfig);
if (string.IsNullOrEmpty(databaseConnectionName))
{
database = dbProvider.CreateDefault();
}
else
{
database = dbProvider.Create(databaseConnectionName);
}CONNECTIONSETTINGS.CONFIG
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b" />
</configSections>
<dataConfiguration defaultDatabase="defaultConnection" />
<connectionStrings>
<add name="defaultConnection" connectionString="Data Source=192.11.111.11;Initial Catalog=TestDB;User Id:Test;Password:test"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>似乎不是使用DatabaseProviderFactory,而是将其更改为使用特定的实现(如SqlDatabase ),它允许您将connectionString作为其构造函数的一部分传递给您,这允许更灵活一些。因此,由于我现在使用的是SqlDatabase,我现在需要了解的是如何将解密的配置文件的内容作为字符串传递到配置对象中。有什么想法吗?
发布于 2010-01-18 05:57:57
最后,我创建了一个自定义配置文件,该文件模拟使用Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings类的基础来读取.config文件,因此实际上我将ConfigurationSettings配置部分全部删除,并将其替换为一个自定义配置类。
希望这能帮上忙。
https://stackoverflow.com/questions/2063417
复制相似问题