web-dev-qa-db-ja.com

C#接続文字列でパスワードを非表示にするにはどうすればよいですか?

次の接続文字列があります。

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password

(.net webservice)これは、app.configファイルを開いて構成設定を確認するだけで、明らかに表示できます。

私が必要としているのは、ハッカーがパスワードを見ることができないようにする方法です。ただし、同時に、別のデータベースにデプロイするときに変更できるように、カスタマイズ可能なままにしておきます。

15
Doomsknight

あなたにはいくつかのオプションがあります-私が知っているもの(優先順に):

  1. 構成ファイルにパスワードを含める必要がない統合(SSPI)セキュリティを使用する
  2. 接続文字列を暗号化します( 保護された構成を使用した構成情報の暗号化 を参照)
  3. ユーザー名とパスワードを別々に保存し、文字列フォーマットを使用して完全な接続文字列を作成します。

したがって、たとえば、接続文字列は次のようになります。

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID={0};Password={1}

オプション1を選択します。それが不可能な場合は、オプション2を選択します。完全を期すためにオプション3について説明しました。

接続情報の保護(ADO.NET) を読んだことがありますか?

15
Justin

まず、「SA」アカウントは使用しないでください。誰かがパスワードを取得した場合、データベースは大きく開いたままになります。特定のデータベースでのCRUD操作のみが許可されているカスタムアカウントを使用します。

web.configを取得する唯一の方法は、サーバーをハッキングすることです。そして、彼らがそれをしたのなら、とにかくあなたは困惑しています。

6
jgauffin

Web.configまたはapp.config内の接続文字列を暗号化するのがおそらく最も簡単です

方法:DPAPIを使用してASP.NET 2.0の構成セクションを暗号化する を参照してください。

3
ChrisBint

接続文字列を暗号化することができます-次に、接続文字列にアクセスするときに、それを復号化します。ただし、接続文字列を復号化するためのキーをどこに保存するかという問題に悩まされているため、これは絶対確実ではありません。

1
Martin Clarke

接続文字列を暗号化/復号化することをお勧めします。したがって、接続文字列は手動で設定する必要があります。

暗号化については、以下をご覧ください: http://dotnet-snippets.de/dns/encrypt-and-decrypt-strings-SID205.aspx

カスタム設定については、以下を参照してください。 http://msdn.Microsoft.com/en-us/library/8eyb2ct1.aspx

実行時に暗号化されたものを正しいものに置き換えます。

  public static void SetAppSettingValue(string Key, string Value)
   {

   System.Configuration.Configuration config == ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Add an Application Setting.

 config.AppSettings.Settings[Key].Value = Value;

  // Save the changes in App.config file.

   config.Save(ConfigurationSaveMode.Modified);

    ConfigurationManager.RefreshSection("appSettings");
  }
1
oberfreak