1

我正在编写一个 .NET 4.0 应用程序,它需要访问 Intranet 上的 SQL Server (v10.50.1600) 数据库。该数据库不支持集成安全/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 的回答。

4

2 回答 2

6

您可以在 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 应用程序,我建议找出未启用集成安全性的原因。

于 2012-09-24T14:56:35.460 回答
2

不,没有。当您需要验证传入密码时,密码哈希很有用。当您需要存储密码以对外部资源进行身份验证时,它是没有用的。

如果您的应用程序在安全服务器(例如 ASP.NET 应用程序)上运行,您可以加密数据库凭据,例如使用Protected Configuration

但是在客户端应用程序中,这并没有太大帮助,除了劝阻普通浏览器,因为如果您的应用程序可以解密配置文件,那么坚定的用户也可以。

于 2012-09-24T14:56:57.893 回答