无法在app .exe.config文件中存储加密的连接字符串?

时间:2014-04-29 19:46:27

标签: visual-studio connection-string configuration-files password-encryption configurationmanager

据我所知,如果您想动态构建然后加密连接字符串,如果您需要能够更改连接字符串,则无法使用应用程序配置文件来存储它们编译后。

只是为了澄清,这是我想要实现的目标:

  • 我想将客户端程序部署到任何地方 - 所以我不知道他们的数据库服务器名称和密码
  • 因此,必须在部署程序
  • 的任何人之后添加连接字符串详细信息
  • 该程序的所有用户都必须使用相同的用户名
  • 访问数据库
  • 我需要加密连接字符串,因为客户不希望密码可见
  • 加密字符串需要包含密码

所以,我希望我的程序提示用户输入服务器名称,用户名,密码等,然后创建连接字符串并将其加密存储在.config文件中

这是我对My.Settings如何处理ConnectionStrings的理解:

  • 程序的.config文件中的ConnectionStrings部分可以加密(例如http://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx)(我的工作正常)

  • 但是,要将连接字符串放入.config文件的部分,必须将其存储为My.Settings中的ConnectionString

  • MySettings中的连接字符串是应用程序范围 - 因此无法在运行时更改

因此,您似乎可以加密连接字符串,但前提是您在编写程序时知道连接字符串是什么。

如果您是客户并且想要编辑ConnectionString,则无法编辑.config文件(因为它已加密),并且程序本身无法更改连接字符串并将其存储到.config文件中。

这是对的吗?是否无法使用应用程序配置文件加密功能来存储在运行时构建的连接字符串?

1 个答案:

答案 0 :(得分:0)

这里你的选择很少。首先 - 使用机器加密连接字符串。并且[我相信]如果您在每个参与服务器上设置相同的机器密钥,它甚至可以在Web场上运行。

您可以做的另一件事是编写自定义配置节处理程序Custom Config Section,它知道如何加密/解密特定部分中的项目。你需要一个向量,你可以直接在处理程序本身和密钥中编写。密钥可以是您提供给客户的软件许可证密钥。您可以从序列化文件或程序集中创建密钥。使用自定义部分,它可以正常工作,用户将更难理解来自何处和来自何处。