如何在app.config上使用加密连接字符串与Windows窗体上的向导生成的Dataset.xsd

我正在使用Visual Studio 2013(.NET 4.5)Oracle Developer Tools最新版本开发 MDI应用程序。 我需要创建一个主窗体,然后它将成为许多不同forms的容器,每个窗体都是不同的应用程序。

应用程序必须连接到不同的Oracle数据库,现在我正在尝试设置主窗体以保持所有连接字符串的加密,并可能在单独的文件上。 现在连接字符串只有一个。

为了加密连接字符串,我使用了那些文章中描述的aspnet_regiis方法:

  • Framework 4.0中的Web配置加密/解密
  • 使用受保护的配置加密配置信息

总结一下:

我在app.config中添加了部分,我在其中定义了自己的RSA提供程序和密钥容器,因为我需要在多台计算机上导出和导入密钥。 然后我创建了密钥容器并将其与aspnet_regiis工具一起使用来加密部分。

我还为TNS_ADMIN变量设置了部分,以使用我自己的Oracle Instant Client和我的自定义tnsnames.ora文件。 这将有助于避免不同的机器操作系统和Oracle客户端版本和配置出现问题。

所以,现在这是我的最终app.config文件应该是这样的:

                        Rsa Key   ZuB8jsXnXR/6Ww47R4Oc/ksSgHsrRuuOkNypbsdfm1ASDlvdsklsgfhtrwaADFHrywswvfhgnjlsGHSDJKFEROvfsd/TV+LKlysPkccEXmJFCcFZ7S9geSInPBaNvYGweR9FcTK1HVcrYMaddgfBK6lpSTTw6cdMRIOcw0Ib//oYPr34=     01old8NrGlRAOLdfdtXUKYuBkZPY5XbWMI/j22Hnm8U=        

现在我需要使用数据源配置向导来设置Oracle数据集,然后能够将表从DataSource Explorer拖放到自动创建导航按钮并保持表之间关系等的表单。

数据源配置向导

但是当我使用原始app.config在新应用程序上使用向导完成配置时,它要求我创建一个ConnectionString并将其存储在app.config ,然后副本也放在Settings.settings文件中, 显然用纯文本

如果我执行上述过程来加密原始app.config部分,那么只有 Settings.settings 存在 ConnectionString 设置时DataSet.xsd 才有效 。 它不使用app.config参数。

我试图打开DataSet.Designer.cs文件,但是为每个TableAdapter对象指定了ConnectionConnectionString参数,因为我的数据集中有很多表,所以我想避免使用查找/替换方法…因为如果我需要对数据集进行一些更改,那么DataSet.xsd文件可能会被覆盖,因此所有编辑都将丢失。

我想知道哪个是替换连接字符串的最佳方法,而是使用加密字符串。

最后,我还想知道是否可以在保存加密的同时将部分移动到另一个.config文件。

– 编辑 –

我做了一些更多的测试来重新创建一个新的应用程序项目,而Visual Studio似乎比我想象的更聪明!

在使用向导设置新数据源后,我将第一个连接字符串添加到空白app.config 。 然后我编辑了app.config并将部分移动到新的connections.config文件。 我应用aspnet_regiis方法来加密该部分,一切正常。 但是,因为我仍然可以在Settings.settings看到纯文本中的连接字符串,所以我决定更改字符串以查看应用程序是否会抛出错误或者它是否可以正常工作。 很简单,如果应用程序抛出错误,那么它使用加密的连接字符串(我想要的 – 正确),否则它使用Settings.settings上的纯文本连接字符串(我不想要的 – 不正确)。 令人惊讶的是,该应用程序抛出exception!

似乎Settings.settings面板总是显示纯文本连接字符串,因为它只读取app.config(以及connections.config),然后应用“动态”解密。 因此,该面板可以被视为app.config的简单视图,它显示了一些参数,即使它们是加密的。

除此之外,我再次使用向导添加了另一个带有另一个连接的数据源。 新连接自动添加到connections.config加密! 我注意到了,因为字符串已更改。 此外,在Settings.settings内的纯文本中也可以看到新连接。 因此,我通过更改字符串重新执行与之前相同的测试,并且应用程序再次抛出错误。

所以,最后, 每次添加新连接时都不需要重新加密app.config文件,因为它是自动完成的! 大!