【问题标题】:WinForms dynamically specifying and managing SQL connection string infoWinForms 动态指定和管理 SQL 连接字符串信息
【发布时间】:2012-09-24 15:37:29
【问题描述】:

我有一个要求,允许用户在第一次使用时指定连接到数据库的连接字符串,然后在 Windows 客户端应用程序中更改它。我目前的想法是将信息存储在一个文本文件中,每次用户打开应用程序使用时都会检查该文件,并在信息已被删除或无效时提示用户更新。但是,我不相信这是处理此问题的安全方法,并且希望有其他建议可以帮助我更好地管理此问题。

【问题讨论】:

    标签: c# sql vb.net winforms enterprise-library


    【解决方案1】:

    按照惯例,我会将它们存储在 app.config 中。您可以轻松地修改代码中的设置。 Here's how

    它们也应该被加密,这也可以在应用程序的启动中完成。您可以像修改设置一样轻松地从代码中加密/解密。 Here's how.

    【讨论】:

    • 我不知道您可以在运行时编写和更改 app.config 文件中的设置。
    • 一般来说,应用程序不应写入其 app.config 文件 - 它们存储在用户没有写入权限的位置。
    【解决方案2】:

    你可以

    1. 对 SQL 使用 Windows 身份验证,这样您就无需管理密码。
    2. 使用CryptProtectData对密码进行编码/解码并保存在磁盘上

    来自 CryptProtectData 文档

    CryptProtectData 函数对数据进行加密 DATA_BLOB 结构。通常,只有具有相同登录的用户 加密数据的用户可以解密数据。在 此外,加密和解密通常必须在 同一台电脑。有关例外的信息,请参阅备注。

    因此,即使 SQL 和 windows 可能有不同的登录名,但如果存在 1-1 映射,您保存的密码加密文本相对安全

    【讨论】:

      【解决方案3】:

      我会将连接字符串存储在 App.Config 或注册表中。我认为您不能在运行时修改 App.Config,因此如果您的应用程序使用数据库,那应该是您的首选。如果没有,请使用平面文件或注册表。你肯定想加密它。请参阅this question 了解如何加密和解密字符串以及对其进行 Base64 编码。

      【讨论】:

        【解决方案4】:

        首先,我不会编写您自己的对话框来获取初始连接字符串;相反,您可以使用 Microsoft 发布的 VS2010 数据库连接对话框 (download from here)。这将完全符合您的要求,而无需您进行艰苦的工作(以及几乎任何您想要的远程连接)。

        不,您对连接字符串信息的持久性,应该不会导致任何重大的安全问题;因为连接字符串本身应该为连接提供安全性;您必须确保保存的连接字符串不包含密码 - 并为每个连续连接打开对话框。如果您使用 Windows 身份验证,没有密码,那么当然可能存在安全问题,但我会说这取决于用户使用正确的安全性。

        如果以上内容还不够,我会将连接字符串存储在Properties.Settings.Default 中,并使用其中一个 .NET 库或什至哈希来加密该字符串。有很多方法可以解决这个问题,但我会使用引用的对话框来获取初始连接字符串,然后将其保存在应用程序的 .config 中并带有属性。很简单。

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 2012-09-04
          • 1970-01-01
          相关资源
          最近更新 更多