1

イントラネット上の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の答えに固執しています。

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

ただし、これはイントラネットアプリケーションであるため、統合セキュリティが有効になっていない理由を確認することをお勧めします。

于 2012-09-24T14:56:35.460 に答える
2

いいえ、ありません。パスワードハッシュは、着信パスワードを検証する必要がある場合に役立ちます。外部リソースへの認証のためにパスワードを保存する必要がある場合は役に立ちません。

アプリが安全なサーバー(ASP.NETアプリなど)で実行されている場合は、保護された構成を使用してデータベースの資格情報を暗号化できます。

しかし、クライアントアプリでは、カジュアルなブラウザーを思いとどまらせることを除いて、これはあまり役に立ちません。アプリが構成ファイルを復号化できれば、決心したユーザーも復号化できるからです。

于 2012-09-24T14:56:57.893 に答える