我要求允许用户在首次使用时指定用于连接数据库的连接字符串,并在以后在Windows客户端应用程序中进行更改。我目前的想法是将信息存储在文本文件中,每次用户打开应用程序时都会检查该文件,如果信息已被删除或无效,则会提示用户更新。我不相信这是一个处理这个问题的安全方法,并希望有其他建议来帮助我更好地管理这个问题。
答案 0 :(得分:1)
你可以
来自CryptProtectData文档
CryptProtectData函数对a中的数据执行加密 DATA_BLOB结构。通常,只有具有相同登录的用户 凭证作为加密数据的用户可以解密数据。在 另外,加密和解密通常必须在 同一台电脑。有关例外的信息,请参阅备注。
所以即使SQL和Windows可能有不同的登录,如果有1-1映射你保存的密码加密文本是相对安全的
答案 1 :(得分:1)
我将它们存储在app.config中,这是通常的做法。您可以轻松修改代码中的设置。 Here's how
它们也应该加密,也可以在应用程序的发布中完成。您可以像修改设置一样轻松地从代码加密/解密。 Here's how
答案 2 :(得分:0)
我会将连接字符串存储在App.Config或注册表中。我不认为您可以在运行时修改App.Config,因此如果您的应用程序使用数据库,那么这应该是您的首选。如果没有,请使用平面文件或注册表。你肯定想要加密它。请参阅this question有关如何加密和解密字符串和Base64编码的信息。
答案 3 :(得分:0)
首先,我不会编写自己的对话框来获取初始连接字符串;相反,您可以使用Microsoft发布的VS2010数据库连接对话框(download from here)。这将完全符合您的要求,而无需您进行艰苦的工作(以及您想要的几乎任何远程连接)。
不,您持久的连接字符串信息,不应导致任何重大安全问题;因为连接字符串本身应该为连接提供安全性;您必须确保保存的连接字符串不包含密码 - 并为每个连续的连接调出对话框。如果你使用Windows身份验证,没有密码,那么当然可能存在安全问题,但我想说用户使用正确的安全性是由。
如果上述内容不够,我会将连接字符串存储在Properties.Settings.Default
中,并使用其中一个.NET库甚至是哈希来加密字符串。有很多方法,但我会使用引用的对话框来获取初始连接字符串,然后在应用程序的.config中使用属性保留它。简单。
我希望这会有所帮助。