2012-12-11 95 views
6

我确定已经有很多讨论,但如何在应用程序中存储密码? (我的意思不是用户密码存储在数据库中的表中,而是用于建立连接字符串的密码)如何存储数据库密码

我见过这样的建议,例如将它存储在一个平面文件(如xml文件)中,然后读取它+在运行时解密它。如果这个应用程序在服务器上运行,这是一个非常好的选择,但是如果应用程序将被部署到最终用户的电脑上呢?即平面文件将被复制到用户的电脑。这仍然是一个好习惯吗? (我的直觉是'不')

我知道SecurityString的存在,但是我也在一篇文章中看到SecurityString也可以很容易地分解。

使用Windows 7附带的密码保险箱是一个好主意吗?有没有什么好的例子,以编程方式使用它?我在msdn中看到过一个例子,但是首先它被标记为'windows 8',其次当我下载文件并在visual studio 2012 EXPRESS中打开解决方案时,它未能打开。

任何建议,欢迎...非常感谢。

--update--

比方说,应用程序将在个人电脑上的Windows域内屈指可数运行。 (1)启动时,应用程序将执行LDAP认证(活动目录)。只有在认证成功后,应用程序才会继续执行,(2)应用程序可以连接到数据库,使用用户输入查询数据库,这是db passwd进入播放以建立连接字符串的位置(不,这不是SQL SERVER数据库,所以我不认为使用Windows身份验证的选项是可行的,除非使用商业插件)。

db驻留在同一个域中,并且已经设置为允许一定范围的IP地址,并且已启用SSL。总之,在这个意义上它是相当安全的。唯一不安全的是如何存储应用程序的db passwd。

引起我注意的是Mysql Workbench。它将保存数据库连接,包括密码 - 存储在密码保管库中。这是mysql自己实现的一个密码库,我很好奇它是如何完成的。

+0

你在使用什么数据库,它托管在哪里?它是否与客户端位于同一个Windows域中? – Jodrell

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

可能的重复[如何安全地存储数据库登录名和密码在C#应用程序?](http://stackoverflow.com/questions/11685206/how-do-i-safely-store-database-login-and-password -in-ac-sharp-application) – Barmar

回答

5

如果应用程序要部署在对系统安全性没有或很少控制的情况下,即外部用户pc,则可能值得创建用户登录。根据此登录验证用户身份,然后从相对安全的服务器使用您需要的任何凭据来提供数据。

这并不能保证安全,但如果您需要在将来某个时候更改密码,或者某个用户受到威胁,它将更容易维护。

8

无法为您的用户提供密码并希望其保持安全。即使它隐藏在已编译的应用程序中,并且使用单向散列进行散列,但已确定将会恢复它。

相反,你应该考虑你的安全架构。

如果您提供的是应用程序连接的服务,那么您应该考虑在公共API中提供某种更健壮的身份验证。

如果连接字符串用于连接到分布式软件的另一部分,则应该使最终用户可以配置密码并将其存储在密钥环或其他加密存储中。

- 更新 -

看起来这可能是你在找什么;

http://www.microsoft.com/indonesia/msdn/credmgmt.aspx

+0

感谢您的回复!我更新了我的帖子,您的想法非常受欢迎。 – user1866880

相关问题