web-dev-qa-db-ja.com

セキュリティの観点からデータベース接続文字列を保存する正しい方法は何ですか?

Webアプリケーションでの接続文字列の処理に関する推奨事項、ベストプラクティス、およびやるべきことは何ですか?絶対にしてはいけないことはありますか?

12
rem

最適なオプション:データベースにパスワードを使用せず、可能な場合は(Windows)統合認証を使用します。もちろん、データベースに対して許可されているアプリケーションのIDを分離します。このようにして、OS/Webサーバー/ SCMに非常に安全な方法でIDを管理させます。

[〜#〜] i [〜#〜]統合された方法[〜#〜] w [〜#〜] indows [〜#〜] a [〜#〜]認証(IWA)、できればDPAPIなどを使用して接続文字列を安全に暗号化し(暗号化キーを管理する必要がないため)、強力なACLを持つ保護されたレジストリキーの暗号化された値。
ASP.NETを使用している場合(コメントではなくOPから)、これを自動的に実行する組み込みツールがあります(バージョンに応じてaspnet_setreg、aspnet_regiisなど...)

6
AviD

してはいけないこと

  • 接続文字列をテキストファイルに入れます。
  • パブリックアクセス可能なフォルダー/ディレクトリに構成ファイルがあります。

あなたがすべきこと。

  • その場でデータベースのパスワードを生成するヘルパー関数を作成します。
  • データベースのパスワードとユーザー名を頻繁に変更します。
  • サーバーが適切に構成されているかどうか、実行可能ファイルをプレーンテキストとして提供していないかどうかを確認してください。
2
Mohamed

接続文字列をWebサイトのルートディレクトリの外に保存することをお勧めします。

ASP.NETを使用している場合、web.configファイルはWebサイトのルートディレクトリにありますが、 web.configファイルのセクションを暗号化する Data Protection APIを使用して、安全に復号化キー。

Webアプリケーションにどのフレームワークを使用していますか?

2
KirkJ

オプションとして、 アプリケーションロールを使用してSQLサーバーにアクセスしてみてください

利点:

  • 通常のネットワーク管理者は、アプリケーションへのアクセス権を持つユーザーを制御するだけで、データベース管理者(DBA)に相談することなく、データアクセスを管理できます。
  • SQL Server自体でユーザーの変更を追跡することについて心配する必要はありません。アプリケーションの役割を設定すると、その役割をネットワークレベルに委任できます。
  • データの可用性を単一のアプリケーションに制限できます。たとえば、ユーザーが総勘定元帳アプリケーションを使用している場合にのみ会計情報を変更でき、SQL Serverに直接接続している場合は変更できない場合があります。
2
garik