我要求允许用户在第一次使用时指定连接到数据库的连接字符串,并稍后在 Windows 客户端应用程序中更改它。我目前的想法是将信息存储在一个文本文件中,每次用户打开应用程序使用时都会检查该文件,并在信息已被删除或无效时提示用户更新。但是,我不相信这是处理此问题的安全方法,并且希望有其他建议可以帮助我更好地管理此问题。
4 回答
你可以
- 对 SQL 使用 Windows 身份验证,这样您就无需管理密码。
- 使用CryptProtectData对密码进行编码/解码并保存在磁盘上
来自 CryptProtectData 文档
CryptProtectData 函数对 DATA_BLOB 结构中的数据执行加密。通常,只有与加密数据的用户具有相同登录凭据的用户才能解密数据。此外,加密和解密通常必须在同一台计算机上完成。有关异常的信息,请参阅备注。
因此,即使 SQL 和 windows 可能有不同的登录名,如果存在 1-1 映射,您保存的密码加密文本相对安全
我会将连接字符串存储在 App.Config 或注册表中。我认为您不能在运行时修改 App.Config,因此如果您的应用程序使用数据库,那应该是您的首选。如果没有,请使用平面文件或注册表。你肯定想加密它。有关如何加密和解密字符串以及 Base64 编码的信息,请参阅此问题。
首先,我不会编写您自己的对话框来获取初始连接字符串;相反,您可以使用 Microsoft 发布的 VS2010 数据库连接对话框(从此处下载)。这将完全符合您的要求,而无需您进行艰苦的工作(以及几乎任何您想要的远程连接)。
不,您对连接字符串信息的持久性不应导致任何重大安全问题;因为连接字符串本身应该为连接提供安全性;您必须确保保存的连接字符串不包含密码 - 并为每个连续连接打开对话框。如果您使用 Windows 身份验证,没有密码,那么当然可能存在安全问题,但我会说这取决于用户使用正确的安全性。
如果以上内容还不够,我会将连接字符串存储在Properties.Settings.Default
其中,并使用其中一个 .NET 库甚至哈希来加密该字符串。有很多方法可以解决这个问题,但我会使用引用的对话框来获取初始连接字符串,然后将其保存在应用程序的 .config 中并带有属性。简单的。
我希望这有帮助。