接続文字列の保護


接続文字列の保護
from: http://msdn.microsoft.com/zh-cn/library/89211k9b%28v=VS.80%29.aspx
 
 
データ・ソースへのアクセスを保護することは、セキュリティ・アプリケーションの最も重要な目標の1つです.データ・ソースへのアクセスを制限するには、ユーザーID、パスワード、データ・ソース名などの接続情報を保護する必要があります.ユーザーIDとパスワード(ソースコードなど)を純粋なテキスト形式で格納すると、深刻なセキュリティ問題が発生します.外部ソースにユーザーIDとパスワード情報を含むコンパイル版コードを提供しても、コンパイルされたコードは逆アセンブリされ、ユーザーIDとパスワードはMSIL逆アセンブリ(Ildasm.exe)ツールを使用して公開される可能性があります.したがって、ユーザーIDやパスワードなどの重要な情報は、コードに存在しないでください.
Windows認証の指定(統合セキュリティ)
Windows認証(統合セキュリティとも呼ばれる)をできるだけ使用することをお勧めします.接続文字列で使用される構文は、プロバイダによって異なります.次の表に.NET Frameworkデータプロバイダで使用される構文を示します.
プロバイダ
構文
SqlClient
 
 

Integrated Security=true;

SqlClient, OleDb
 
 

Integrated Security=SSPI;

Odbc
 
 

Trusted_Connection=yes;

OracleClient
 
 

Integrated Security=yes;

注意:OleDbプロバイダでIntegrated Security=trueを使用すると、例外が発生します.
安全上の注意
接続文字列でPersist Security Infoキーをtrueまたはyesに設定すると、接続を開いた後に、ユーザーIDとパスワードを含むセキュリティに関する情報を接続から取得できます.接続を確立する際にユーザーIDとパスワードを指定する必要がある場合、最も安全な方法は、情報を使用して接続を開いた後にこれらの情報を破棄することであり、Persist Security Infoがfalseまたはnoに設定されている場合に発生します.この点は、信頼できないソースに開いた接続を提供したり、接続情報をディスクに永続的に保存したりする場合に特に重要です.Persist Security Infoをfalseのままにすると、信頼できないソースが接続中のセキュリティに関する情報にアクセスできないことを確認し、接続文字列情報とともにセキュリティに関する情報がディスクに永続的に保存されないことを確認できます.デフォルトでは、Persist Security Infoはfalseに設定されています.
汎用データリンクファイルを使用しない
ユニバーサルデータリンク(UDL)ファイルでOleDbConnectionの接続情報を提供できます.しかし、このようなことは避けるべきだ.UDLファイルは暗号化されておらず、接続文字列情報が明文で公開されます.UDLファイルはアプリケーションにとって外部ファイルベースのリソースであるため、.NET Frameworkを使用してセキュリティを保護することはできません.
接続文字列をプロファイルに格納
接続文字列がコードに格納されないように、ASP.NETアプリケーションのweb.configファイルやWindowsアプリケーションのapp.configファイルにコードを格納します.
接続文字列は、プロファイルの要素に格納できます.接続文字列はキー/値ペアとして格納され、実行時にconnectionStringプロパティに格納されている値を名前で検索できます.次のプロファイルの例では、SQL Serverローカルインスタンスに接続されている接続文字列を参照するDatabaseConnectionという接続文字列が表示されます.
 
 


    


プロファイルからの接続文字列の取得
System.configurationネーミングスペースは、プロファイルに格納されている構成情報を使用するクラスを提供します.ConnectionStringSettingsクラスには、上記の例のセクションに表示される名前にマッピングされる2つのプロパティがあります.
ConnectionString
接続文字列.
Name
部分的な接続文字列の名前.
次の例では、接続文字列の名前をコンフィギュレーションマネージャに渡し、コンフィギュレーションファイルから文字列を取得するためにConnectionStringSettingsオブジェクトを返します.ConnectionsStringプロパティを使用して、この値を表示します.
C#
VB
 
using System;
using System.Configuration;

class Program
{
    static void Main()
    {
        ConnectionStringSettings settings;
        settings = 
            ConfigurationManager.ConnectionStrings["DatabaseConnection"];
        if (settings != null)
        {
            Console.WriteLine(settings.ConnectionString);
        }
    }
}


保護された構成を使用して接続文字列を暗号化
保護された構成機能は、ユーザー名とパスワード、データベース接続文字列、暗号化キーなど、ASP.NETアプリケーションのWeb.configファイルやWindowsアプリケーションのApp.configファイルなどの構成ファイルの機密情報を暗号化するために使用できます.「保護された構成を使用して構成情報を暗号化し、構成セクションを暗号化および復号化および演習する」を参照してください.保護された構成を使用して構成情報を暗号化します.
ユーザー入力による接続文字列の作成
外部ソース(ユーザーIDやパスワードを指定したユーザーなど)から接続文字列情報を取得する場合は、そのソースからのすべての入力を検証し、フォーマットが正しく、接続に影響を与える他のパラメータが含まれていないことを確認する必要があります.詳細については、「ユーザー入力の検証」を参照してください.
接続文字列ジェネレータの使用
DbConnectionStringBuilderクラスは、強いタイプの接続文字列生成器を派生させるためのベースクラスを提供します.これらのジェネレータを使用すると、プログラミングによって文法的に正しい接続文字列を作成し、既存の接続文字列を分析および再構築できます.DbConnectionStringBuilderクラスを使用して、任意のキー/値ペアを割り当て、生成された接続文字列を強力なタイプのプロバイダに渡すことができます.以下に.NET Frameworkの一部として提供されるデータプロバイダは、DbConnectionsStringBuilderから継承された強力なタイプ化されたクラスを提供します.
  • SqlConnectionStringBuilder
  • OracleConnectionStringBuilder
  • OdbcConnectionStringBuilder
  • OleDbConnectionStringBuilder

  • 「」を参照してください.
    タスク#タスク#
    方法:データ・ソース・コントロールの使用時に文字列を接続するセキュリティを確保します.
    コンセプト
    接続文字列の暗号化とデータを使用してSecuring the User's Passwordにアクセス
    その他のリソース
    ADO.NETアプリケーションの安全な使用を保証する保護された構成暗号化構成情報