缓存密码为SQL Server连接作为哈希(Cache password for SQL Serve

2019-09-29 11:35发布

我正在写需要访问到SQL Server(v10.50.1600)数据库Intranet上.NET 4.0的应用程序。 该数据库不支持集成安全/ SSPI登录,只有用户/密码登录。 到目前为止,我已经成功的最好的是:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder()
{
   DataSource = Settings.SQLHostName,
   Encrypt = true,
   TrustServerCertificate = true,
   UserID = Settings.SQLUser,
   Password = "xxx",
   InitialCatalog = "xxx"
};

然而,这需要我存储和处理在本地一个纯文本的密码,我想避免的事情。

有没有办法让ADO,LINQ或实体框架,等一个密码哈希,而不是连接到SQL Server的密码吗?


而对于连接字符串加密存储是聊胜于无,但最终需要在使用前进行解密。 由于背后没有对WPF密码框可绑定的内容属性的理由显然,保持明文密码在内存中是一个坏主意,任何形式的连接字符串解密使用前听起来不明智的。

理想的替代方案是如何理解SQL服务器存储和传输的密码摘要; 应用相同的本地摘要算法; 然后发送摘要,而不是明文密码。 不幸的是,它似乎TDS7密码编码在此部分中描述:

http://dbaspot.com/ms-sqlserver/210567-tds7-8-login-packets.html

似乎不使用任何摘要算法的。 所以,我可能坚持以下podiluska的答案。

Answer 1:

您可以加密在App.config的连接字符串。

http://msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/53tyfkaw(v=vs.100).aspx

然而,由于这是一个Intranet应用程序,我会建议找出为什么不启用集成安全性。



Answer 2:

没有没有。 当你需要验证收到的密码哈希密码是非常有用的。 这是没有用的,当你需要存储一个密码来验证到外部资源。

如果您的应用程序是一个安全的服务器(例如ASP.NET应用程序)上运行,你可以使用加密数据库的凭据,如受保护的配置 。

但是,在一个客户端应用程序,这不会有太大的帮助,除了劝阻随意的浏览器,因为如果你的应用程序可以解密配置文件,确定用户就能过。



文章来源: Cache password for SQL Server connection as a hash