我正在编写一个 .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 的回答。