2012-01-06 11 views

答えて

7

EFまたは他のORMの使用に違いはありませんが、EFコンテキストの初期化を自動的に呼び出す前に、接続文字列を暗号化して解読する標準的な方法を使用できます。

+0

からパスワードを解析するために使用される機能 –

3

あなたは(ASPNETアイデンティティを使用している場合DBContextまたはIdentityDbContext)コンテキストクラスからの接続文字列への呼び出しを逮捕し、接続を変更することができます文字列が返されます。私の場合、接続文字列全体を暗号化する代わりに、パスワードだけを暗号化することを選択しました。同じ方法を使用して、接続文字列全体を暗号化することができます。

注:機能(StringCipher.Decrypt)は暗号化および復号化するために使用されるこのスレッドから来た - >https://stackoverflow.com/a/1344255/1390025

ここでは、上記で

 public YourDB() 
     : base(GetSqlConnection("DefaultConnection")) 
    {} 

接続文字列への呼び出しを逮捕場所ですシナリオ私はapp.configまたはweb.configから接続文字列を取得しています。ただし、リクエストごとに、接続文字列全体を暗号化することができ、以下の例のようにすることができます。

public YourDB() 
     : base(StringCipher.Decrypt("your-encrypted-connection-string", "passphrase-used-to-encrypt")) 
    {} 

パスワードのみが暗号化されているシナリオでは、以下の関数は暗号化されたパスワードをプレーンテキストに置き換えて接続文字列を返します。

 public static string GetSqlConnection(string connectionStringName = "DefaultConnection") 
    { 
     // optionally defaults to "DefaultConnection" if no connection string name is inputted 
     string connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; 
     string passPhrase = "passphrase-used-to-encrypt"; 
     // decrypt password 
     string password = get_prase_after_word(connectionString, "password=", ";"); 
     connectionString = connectionString.Replace(password, StringCipher.Decrypt(password, passPhrase)); 
     return connectionString; 
    } 

あなたの助けとリンクについては多くtnkx接続文字列

 public static string get_prase_after_word(string search_string_in, string word_before_in, string word_after_in) 
    { 
     int myStartPos = 0; 
     string myWorkString = ""; 

     // get position where phrase "word_before_in" ends 

     if (!string.IsNullOrEmpty(word_before_in)) 
     { 
      myStartPos = search_string_in.ToLower().IndexOf(word_before_in) + word_before_in.Length; 

      // extract remaining text 
      myWorkString = search_string_in.Substring(myStartPos, search_string_in.Length - myStartPos).Trim(); 

      if (!string.IsNullOrEmpty(word_after_in)) 
      { 
       // get position where phrase starts in the working string 
       myWorkString = myWorkString.Substring(0, myWorkString.IndexOf(word_after_in)).Trim(); 

      } 
     } 
     else 
     { 
      myWorkString = string.Empty; 
     } 
     return myWorkString.Trim(); 
    } 
関連する問題