接続文字列の構文 (ADO.NET)
すべての .NET Framework データ プロバイダーは、DbConnection を継承する Connection オブジェクトに加え、プロバイダー固有の ConnectionString プロパティを持ちます。それぞれのプロバイダーに固有の接続文字列の構文は、対応する ConnectionString プロパティのトピックで説明されています。次の表は、.NET Framework に含まれている 4 つのデータ プロバイダーを一覧にしたものです。
.NET Framework データ プロバイダー |
説明 |
---|---|
バージョン 7.0 以降の Microsoft SQL Server にデータ アクセスを提供します。接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
|
OLE DB を使って公開されたデータ ソースへのデータ アクセスを提供します。接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
|
ODBC を使って公開されたデータ ソースへのデータ アクセスを提供します。接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
|
Oracle バージョン 8.1.7 以降へのデータ アクセスを提供します。接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
接続文字列ビルダー
ADO.NET 2.0 では、.NET Framework データ プロバイダー用の次の接続文字列ビルダーが導入されました。
接続文字列ビルダーを使用すると、構文的に正しい接続文字列を実行時に構築できるため、コード内で接続文字列値を手動で連結する必要はありません。詳細については、「接続文字列ビルダー (ADO.NET)」を参照してください。
Windows 認証
データ ソースがサポートしている場合は、Windows 認証 (統合セキュリティ) を使用して接続することをお勧めします。接続文字列の構文は、プロバイダーによって異なります。.NET Framework データ プロバイダーで使用されている Windows 認証の構文を次の表に示します。
プロバイダー |
構文 |
---|---|
SqlClient |
Integrated Security=true; -- or -- Integrated Security=SSPI; |
OleDb |
Integrated Security=SSPI; |
Odbc |
Trusted_Connection=yes; |
OracleClient |
Integrated Security=yes; |
メモ |
---|
OleDb プロバイダーで Integrated Security=true に設定すると例外がスローされます。 |
SqlClient 接続文字列
SqlConnection 接続文字列の構文については、SqlConnection.ConnectionString プロパティで説明されています。ConnectionString プロパティを使用すると、SQL Server 7.0 以降のデータベースで接続文字列を取得または設定することができます。以前のバージョンの SQL Server に接続する必要がある場合は、.NET Framework Data Provider for OleDb (System.Data.OleDb) を使用する必要があります。接続文字列のほとんどのキーワードは、SqlConnectionStringBuilder のプロパティにマップされています。
次の構文のフォームはそれぞれ、Windows 認証を使用してローカル サーバー上の AdventureWorks データベースに接続します。
"Persist Security Info=False;Integrated Security=true;
Initial Catalog=AdventureWorks;Server=MSSQL1"
"Persist Security Info=False;Integrated Security=SSPI;
database=AdventureWorks;server=(local)"
"Persist Security Info=False;Trusted_Connection=True;
database=AdventureWorks;server=(local)"
SQL Server ログイン
SQL Server への接続には Windows 認証の使用をお勧めします。ただし、どうしても SQL Server 認証を使用する必要がある場合は、次の構文に従ってユーザー名とパスワードを指定してください。この例では、アスタリスクを使用して有効なユーザー名とパスワードを表しています。
"Persist Security Info=False;User ID=*;Password=*;Initial Catalog=AdventureWorks;Server=MySqlServer"
セキュリティに関するメモ |
---|
PersistSecurity Info キーワードの既定の設定は false です。このキーワードを true または yes に設定すると、ユーザー ID やパスワードなどのセキュリティ関連情報を、接続を開いた後にその接続から取得できます。機密を要する接続文字列情報が、信頼できないソースによってアクセスされることのないよう、PersistSecurity Info は必ず false にしてください。 |
SQL Server の名前付きインスタンスに接続するには、server name\instance name 構文を使用します。
Data Source=MySqlServer\MSSQL1;"
接続文字列の作成時に、SqlConnectionStringBuilder の DataSource プロパティをインスタンス名に設定することもできます。SqlConnection オブジェクトの DataSource プロパティは読み取り専用です。
メモ |
---|
Windows 認証は SQL Server ログインよりも優先されます。Integrated Security を true に指定し、ユーザー名とパスワードも指定した場合、ユーザー名とパスワードは無視され、Windows 認証が使用されます。 |
Type System Version の変更
クライアント アプリケーションで利用可能な機能は、SQL Server のバージョンとデータベースの互換性レベルに依存します。SqlConnection.ConnectionString の Type System Version キーワードは、クライアント側での SQL Server 型の表現の指定に使用できます。使用されている SQL Server のバージョンが、クライアント アプリケーションで想定されているものと異なる場合、アプリケーションが正常に動作しない可能性がありますが、型システムのバージョンを明示的に設定することでその問題を防ぐことができます。たとえば、SQL Server 2000 を指定した場合、UDT 列は byte[] 配列で表されます。SQL Server 2005 を指定した場合はマネージ型として表されます。
次の表に、Type System Version で使用可能な値を示します。
値 |
説明 |
---|---|
Latest |
このクライアント/サーバーの組み合わせで扱うことのできる最新バージョンが使用されます。クライアントおよびサーバーのコンポーネントをアップグレードすると、使用されるバージョンも自動的に繰り上げられます。これは ADO.NET の既定の設定です。 |
SQL Server 2000 |
SQL Server 2000 の型システムが使用されます。 |
SQL Server 2005 |
SQL Server 2005 の型システムが使用されます。 |
SQL Server 2008 |
SQL Server 2008 の型システムが使用されます。Datetime 値は、型システムのバージョンおよびサーバーで指定された既定の言語に基づいて処理されます。 |
SQL Server 2008 で導入された機能との互換性を確保するには、次のいずれかの方法で、接続文字列内に Type System Version を明示的に指定します。
Type System Version= SQL Server 2008;
Type System Version=Latest;
メモ |
---|
SQL Server でインプロセスで実行される共通言語ランタイム (CLR) コードに対して型システムのバージョンを設定することはできません。詳細については、「SQL Server の共通言語ランタイム統合 (ADO.NET)」を参照してください。 |
SQL Server Express ユーザー インスタンスへの接続とアタッチ
ユーザー インスタンスは、SQL Server 2005 Express Edition でのみ利用できる新機能です。最小限の特権しか持たないローカル Windows アカウントで実行しているユーザーが、SQL Server データベースにアタッチできます。この場合、管理者特権は不要です。ユーザー インスタンスは、サービスとしてではなく、ユーザーの Windows 資格情報で実行されます。
ユーザー インスタンスの使用の詳細については、「SQL Server Express ユーザー インスタンスへの接続 (ADO.NET)」を参照してください。
TrustServerCertificate の使用
TrustServerCertificate は ADO.NET 2.0 で新たに導入されたキーワードです。有効な証明書を持つ SQL Server 2005 インスタンスに接続する場合にのみ使用できます。TrustServerCertificate を true に設定した場合、トランスポート層に SSL が使用されてチャネルが暗号化されます。また、証明書チェーンをたどることによる信頼性の検証は省略されます。
"TrustServerCertificate=true;"
メモ |
---|
TrustServerCertificate を true に設定して暗号化を有効にした場合、接続文字列で Encrypt を false に設定したとしても、サーバーで指定された暗号化レベルが使用されます。それ以外の場合、接続は失敗します。 |
暗号化の有効化
サーバー証明書がプロビジョニングされていない場合、暗号化を有効にするには、SQL Server 構成マネージャーで [プロトコルの暗号化を設定する] オプションと [サーバー証明書を信頼する] オプションを設定する必要があります。このように、検証可能なサーバー証明書がプロビジョニングされていない場合、暗号化には検証を伴わない自己署名入りのサーバー証明書が使用されます。
SQL Server で構成されたセキュリティのレベルを、アプリケーションの設定によって緩和することはできません。ただし、必要に応じて厳密にすることはできます。アプリケーションから暗号化を要求するには、TrustServerCertificate キーワードおよび Encrypt キーワードを true に設定します。こうすることで、サーバー証明書がプロビジョニングされておらず、なおかつ、クライアントで [プロトコルの暗号化を設定する] が構成されていない場合でも常に暗号化が行われます。ただし、クライアントの構成で TrustServerCertificate を有効にしなかった場合は、プロビジョニングされたサーバー証明書が必要です。
次の表ですべてのケースを説明します。
[プロトコルの暗号化を設定する] クライアント設定 |
[サーバー証明書を信頼する] クライアント設定 |
Encrypt/Use Encryption for Data 接続文字列/属性 |
Trust Server Certificate 接続文字列/属性 |
結果 |
---|---|---|---|---|
無効 |
なし |
無効 (既定値) |
無視 |
暗号化は行われません。 |
無効 |
なし |
有効 |
無効 (既定値) |
暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
いいえ |
N/A |
有効 |
有効 |
暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
有効 |
いいえ |
無視 |
無視 |
暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
有効 |
有効 |
無効 (既定値) |
無視 |
暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
有効 |
有効 |
有効 |
無効 (既定値) |
暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
有効 |
有効 |
有効 |
有効 |
暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
詳細については、SQL Server オンライン ブックの「検証を伴わない暗号化の使用」を参照してください。
OleDb 接続文字列
OleDbConnection の ConnectionString プロパティを使用すると、Microsoft Access や SQL Server 6.5 以降などの OLE DB データベースで接続文字列を取得または設定することができます。OleDbConnectionStringBuilder クラスを使用して、実行時に OleDb 接続文字列を作成することもできます。
OleDb 接続文字列の構文
OleDbConnection 接続文字列では、プロバイダー名を指定する必要があります。次の接続文字列は、Jet プロバイダーを使用して Microsoft Access データベースに接続します。UserID および Password キーワードは、データベースがセキュリティ保護されていない場合は省略できます (既定)。
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\Northwind.mdb;User ID=Admin;Password=;
ユーザー レベルのセキュリティを使用して Jet データベースがセキュリティ保護されている場合は、ワークグループ情報ファイル (.mdw) の場所を指定する必要があります。ワークグループ情報ファイルを使用して接続文字列に表示された資格情報を検証します。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Northwind.mdb;Jet OLEDB:System Database=d:\NorthwindSystem.mdw;User ID=*;Password=*;
SQL Server バージョン 6.5 以前では、Provider キーワードに sqloledb を使用してください。
Provider=sqloledb;Data Source=MySqlServer;Initial Catalog=pubs;User Id=*;Password=*;
セキュリティに関するメモ |
---|
OleDbConnection の接続情報は、UDL (Universal Data Link) ファイルを使用して提供できますが、このファイルは使用しないでください。UDL ファイルは暗号化されないため、接続文字列をテキスト形式で表現してしまいます。UDL ファイルは、アプリケーションにとって外部ファイルをベースにしたリソースであるため、.NET Framework でセキュリティ保護できません。SqlClient では UDL ファイルはサポートされていません。 |
DataDirectory を使用した Access/Jet との接続
DataDirectory の使用は SqlClient に限定されません。System.Data.OleDb および System.Data.Odbc .NET データ プロバイダーでも使用できます。アプリケーションの app_data フォルダーに格納された Northwind.mdb に接続するための OleDbConnection 文字列の構文を次の例に示します。この場所には、システム データベース (System.mdw) も格納されています。
"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=|DataDirectory|\Northwind.mdb;
Jet OLEDB:System Database=|DataDirectory|\System.mdw;"
セキュリティに関するメモ |
---|
Access/Jet データベースをセキュリティで保護しない場合は、接続文字列にシステム データベースの場所を指定する必要はありません。既定では、セキュリティが無効になります。すべてのユーザーが、空のパスワードで組み込みの Admin ユーザーとして接続することになります。ユーザー レベルのセキュリティを正しく実装したとしても、Jet データベースは攻撃に対して無防備です。ファイル ベースのセキュリティでは克服できない限界があるため、Access/Jet データベースに機密情報を格納することはお勧めできません。 |
Excel への接続
Excel ワークブックへの接続には、Microsoft Jet プロバイダーが使用されます。次の接続文字列では、Extended Properties キーワードは Excel に固有のプロパティを設定しています。"HDR=Yes;" は、最初の列にデータではなく、行の名前が含まれていることを示し、"IMEX=1;" は、「intermixed」データ行を常にテキストとして読み取ることをドライバーに指示しています。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""
Extended Properties を二重引用符で囲む必要があることに注意してください。
Data Shape プロバイダーの接続文字列の構文
Microsoft Data Shape プロバイダーを使用するときは、Provider および Data Provider キーワードを両方使用してください。Shape プロバイダーを使用して SQL Server のローカル インスタンスに接続する例を次に示します。
"Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;Integrated Security=SSPI;"
Odbc 接続文字列
OdbcConnection の ConnectionString プロパティを使用すると、OLE DB データベースで接続文字列を取得または設定することができます。OdbcConnectionStringBuilder は、Odbc の接続文字列もサポートしています。
次の接続文字列では、Microsoft Text Driver を使用しています。
Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=d:\bin
DataDirectory を使用した Visual FoxPro との接続
次の OdbcConnection 接続文字列は、DataDirectory を使用して Microsoft Visual FoxPro ファイルに接続する例を示しています。
"Driver={Microsoft Visual FoxPro Driver};
SourceDB=|DataDirectory|\MyData.DBC;SourceType=DBC;"
Oracle 接続文字列
OracleConnection の ConnectionString プロパティを使用すると、OLE DB データベースで接続文字列を取得または設定することができます。OracleConnectionStringBuilder は、Oracle の接続文字列もサポートしています。
Data Source=Oracle9i;User ID=*;Password=*;
ODBC 接続文字列の構文の詳細については、「ConnectionString」を参照してください。