接続文字列の構文
すべての .NET Framework データ プロバイダーは、Connection
を継承する DbConnection オブジェクトに加え、プロバイダー固有の ConnectionString プロパティを持ちます。 それぞれのプロバイダーに固有の接続文字列の構文は、対応する ConnectionString
プロパティのトピックで説明されています。 次の表は、.NET Framework に含まれている 4 つのデータ プロバイダーを一覧にしたものです。
.NET Framework データ プロバイダー | 説明 |
---|---|
System.Data.SqlClient | Microsoft SQL Server へのデータ アクセスを提供します。 接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
System.Data.OleDb | OLE DB を使って公開されたデータ ソースへのデータ アクセスを提供します。 接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
System.Data.Odbc | ODBC を使って公開されたデータ ソースへのデータ アクセスを提供します。 接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
System.Data.OracleClient | Oracle バージョン 8.1.7 以降へのデータ アクセスを提供します。 接続文字列の構文の詳細については、「ConnectionString」を参照してください。 |
接続文字列ビルダー
ADO.NET 2.0 では、.NET Framework データ プロバイダー用の次の接続文字列ビルダーが導入されました。
- SqlConnectionStringBuilder
- OleDbConnectionStringBuilder
- OdbcConnectionStringBuilder
- OracleConnectionStringBuilder
接続文字列ビルダーを使用すると、構文的に正しい接続文字列を実行時に構築できるため、コード内で接続文字列値を手動で連結する必要はありません。 詳細については、「接続文字列ビルダー」をご覧ください。
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; |
Note
Integrated Security=true
プロバイダーで OleDb
に設定すると例外がスローされます。
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。
SqlClient 接続文字列
SqlConnection 接続文字列の構文については、SqlConnection.ConnectionString プロパティで説明されています。 ConnectionString プロパティを使用すると、SQL Server データベースの接続文字列を取得または設定することができます。 以前のバージョンの SQL Server に接続する必要がある場合は、.NET Framework Data Provider for OleDb (System.Data.OleDb) を使用する必要があります。 接続文字列のほとんどのキーワードは、SqlConnectionStringBuilder のプロパティにマップされています。
重要
Persist Security Info
キーワードの既定の設定は false
です。 このキーワードを true
または yes
に設定すると、ユーザー ID やパスワードなどのセキュリティ関連情報を、接続を開いた後にその接続から取得できます。 機密を要する接続文字列情報が、信頼できないソースによってアクセスされることのないよう、Persist Security Info
は必ず false
にしてください。
SqlClient での Windows 認証
次の構文のフォームはそれぞれ、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)"
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。
SqlClient での SQL Server 認証
SQL Server (オンプレミス) への接続には Windows 認証が推奨されます。 ただし、どうしても SQL Server 認証を使用する必要がある場合は、次の構文に従ってユーザー名とパスワードを指定してください。 この例では、アスタリスクを使用して有効なユーザー名とパスワードを表しています。
"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer"
Azure SQL Database または Azure SQL Data Warehouse に接続し、user@servername
の形式でログインを指定する場合は、ログインの servername
の値が Server=
に指定されている値と一致することを確認します。
Note
Windows 認証は SQL Server ログインよりも優先されます。 ユーザー名とパスワードおよに Integrated Security=true
の両方を指定すると、ユーザー名とパスワードは無視され、Windows 認証が使用されます。
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。
SQL Server の名前付きインスタンスに接続する
SQL Server の名前付きインスタンスに接続するには、server name\instance name 構文を使用します。
"Data Source=MySqlServer\\MSSQL1;"
接続文字列の作成時に、DataSource の SqlConnectionStringBuilder
プロパティをインスタンス名に設定することもできます。 DataSource オブジェクトの SqlConnection プロパティは読み取り専用です。
Type System Version の変更
SqlConnection.ConnectionString の Type System Version
キーワードは、クライアント側での SQL Server 型の表現を指定します。 SqlConnection.ConnectionString キーワードの詳細については、Type System Version
のトピックを参照してください。
SQL Server Express ユーザー インスタンスへの接続とアタッチ
ユーザー インスタンスは、SQL Server Express の機能の 1 つです。 最小限の特権しか持たないローカル Windows アカウントで実行しているユーザーが、SQL Server データベースにアタッチできます。この場合、管理特権は不要です。 ユーザー インスタンスは、サービスとしてではなく、ユーザーの Windows 資格情報で実行されます。
ユーザー インスタンスの使用について詳しくは、「SQL Server Express ユーザー インスタンス」をご覧ください。
TrustServerCertificate の使用
TrustServerCertificate
キーワードは、有効な証明書を使用して SQL Server インスタンスに接続する場合にのみ使用できます。 TrustServerCertificate
を true
に設定した場合、トランスポート層に SSL が使用されてチャネルが暗号化されます。また、証明書チェーンをたどることによる信頼性の検証は省略されます。
"TrustServerCertificate=true;"
Note
TrustServerCertificate
を true
に設定して暗号化を有効にした場合、接続文字列で Encrypt
を false
に設定したとしても、サーバーで指定された暗号化レベルが使用されます。 それ以外の場合、接続は失敗します。
暗号化を有効にする
サーバー証明書がプロビジョニングされていない場合、暗号化を有効にするには、SQL Server 構成マネージャーで [プロトコルの暗号化を設定する] オプションと [サーバー証明書を信頼する] オプションを設定する必要があります。 このように、検証可能なサーバー証明書がプロビジョニングされていない場合、暗号化には検証を伴わない自己署名入りのサーバー証明書が使用されます。
SQL Server で構成されたセキュリティのレベルを、アプリケーションの設定によって緩和することはできません。ただし、必要に応じて厳密にすることはできます。 アプリケーションから暗号化を要求するには、TrustServerCertificate
キーワードおよび Encrypt
キーワードを true
に設定します。こうすることで、サーバー証明書がプロビジョニングされておらず、なおかつ、クライアントで [プロトコルの暗号化を設定する] が構成されていない場合でも常に暗号化が行われます。 ただし、クライアントの構成で TrustServerCertificate
を有効にしなかった場合は、プロビジョニングされたサーバー証明書が必要です。
次の表ですべてのケースを説明します。
[プロトコルの暗号化を設定する] クライアント設定 | [サーバー証明書を信頼する] クライアント設定 | Encrypt/Use Encryption for Data 接続文字列/属性 | Trust Server Certificate 接続文字列/属性 | 結果 |
---|---|---|---|---|
いいえ | 該当なし | 無効 (既定値) | 無視 | 暗号化は行われません。 |
いいえ | 該当なし | はい | 無効 (既定値) | 暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
いいえ | 該当なし | はい | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
はい | いいえ | 無視 | 無視 | 暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
はい | はい | 無効 (既定値) | 無視 | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
はい | イエス | はい | 無効 (既定値) | 暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
はい | イエス | イエス | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
詳細については、「検証を伴わない暗号化の使用」を参照してください。
OleDb 接続文字列
ConnectionString の OleDbConnection プロパティを使用すると、Microsoft Access などの OLE DB データ ソースの接続文字列を取得または設定することができます。 OleDb
クラスを使用して、実行時に OleDbConnectionStringBuilder 接続文字列を作成することもできます。
OleDb 接続文字列構文
OleDbConnection 接続文字列では、プロバイダー名を指定する必要があります。 次の接続文字列は、Jet プロバイダーを使用して Microsoft Access データベースに接続します。 User ID
および 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=*****;
重要
OleDbConnection の接続情報は、UDL (Universal Data Link) ファイルを使用して提供できますが、このファイルは使用しないでください。 UDL ファイルは暗号化されないため、接続文字列をテキスト形式で表現してしまいます。 UDL ファイルは、アプリケーションにとって外部ファイルをベースにしたリソースであるため、.NET Framework でセキュリティ保護できません。 UDL ファイルは SqlClient ではサポートされていません。
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。
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;"
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。
Odbc 接続文字列
ConnectionString の OdbcConnection プロパティを使用すると、OLE DB データベースで接続文字列を取得または設定することができます。 OdbcConnectionStringBuilder は、Odbc の接続文字列もサポートしています。
次の接続文字列では、Microsoft Text Driver を使用しています。
Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=d:\bin
Oracle 接続文字列
ConnectionString の OracleConnection プロパティを使用すると、OLE DB データベースで接続文字列を取得または設定することができます。 OracleConnectionStringBuilder は、Oracle の接続文字列もサポートしています。
Data Source=Oracle9i;User ID=*****;Password=*****;
ODBC 接続文字列の構文の詳細については、「ConnectionString」を参照してください。
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。