イントラネット上のSQLServer(v10.50.1600)データベースへのアクセスを必要とする.NET4.0アプリケーションを作成しています。データベースは統合セキュリティ/SSPIログインをサポートせず、ユーザー/パスワードログインのみをサポートします。私がこれまでに管理した最高のものは次のとおりです。
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder()
{
DataSource = Settings.SQLHostName,
Encrypt = true,
TrustServerCertificate = true,
UserID = Settings.SQLUser,
Password = "xxx",
InitialCatalog = "xxx"
};
ただし、これにはプレーンテキストのパスワードをローカルに保存して操作する必要があります。これは避けたいことです。
SQL Serverに接続するためのパスワードの代わりに、ADO、LINQ、またはEntity Frameworkなどにパスワードハッシュを与える方法はありますか?
接続文字列用の暗号化されたストレージは何もないよりはましですが、最終的には使用前に復号化する必要があります。WPFパスワードボックスにバインド可能なコンテンツプロパティがない理由は、プレーンテキストのパスワードをメモリに保持することは悪い考えであるため、使用前に接続文字列を復号化することはお勧めできません。
理想的な代替手段は、SQLサーバーがパスワードダイジェストを保存および送信する方法を理解することです。同じダイジェストアルゴリズムをローカルに適用します。次に、プレーンテキストのパスワードの代わりにダイジェストを送信します。残念ながら、ここで部分的に説明されているTDS7パスワードエンコーディングのようです。
http://dbaspot.com/ms-sqlserver/210567-tds7-8-login-packets.html
ダイジェストアルゴリズムをまったく使用していないようです。だから私はおそらく以下のpodiluskaの答えに固執しています。