接続文字列の構文
適用対象: .NET Framework .NET .NET Standard
Microsoft.Data.SqlClient には、DbConnection から継承される Connection
オブジェクトと、プロバイダー固有の ConnectionString プロパティがあります。 SqlClient プロバイダーの特定の接続文字列の構文については、その ConnectionString
プロパティに記載されています。 接続文字列の構文の詳細については、「ConnectionString」を参照してください。
接続文字列ビルダー
Microsoft SqlClient Data Provider for SQL Server では、次の接続文字列ビルダーが導入されました。
接続文字列ビルダーを使用すると、構文的に正しい接続文字列を実行時に構築できるため、コード内で接続文字列値を手動で連結する必要はありません。 詳細については、「接続文字列ビルダー」をご覧ください。
Windows 認証
データ ソースでサポートされている場合は、Windows 認証 ("統合セキュリティ" とも呼ばれます) を使用して接続することをお勧めします。 次の表は、Microsoft SqlClient Data Provider for SQL Server で使用される Windows 認証構文を示しています。
プロバイダー | 構文 |
---|---|
SqlClient |
Integrated Security=true; -- or -- Integrated Security=SSPI; |
SqlClient 接続文字列
SqlConnection 接続文字列の構文については、SqlConnection.ConnectionString プロパティで説明されています。 ConnectionString プロパティを使用すると、SQL Server データベースの接続文字列を取得または設定することができます。 接続文字列のキーワードは、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;Encrypt=True;"
"Persist Security Info=False;Integrated Security=SSPI;
database=AdventureWorks;server=(local);Encrypt=True;"
"Persist Security Info=False;Trusted_Connection=True;
database=AdventureWorks;server=(local);Encrypt=True;"
SqlClient での SQL Server 認証
SQL Server への接続には Windows 認証の使用をお勧めします。 ただし、どうしても SQL Server 認証を使用する必要がある場合は、次の構文に従ってユーザー名とパスワードを指定してください。 この例では、アスタリスクを使用して有効なユーザー名とパスワードを表しています。
"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer;Encrypt=True;"
Azure SQL Database または Azure Synapse Analytics に接続して user@servername
形式でユーザー名を指定する場合は、ユーザー名の servername
値が Server=
に指定された値と一致していることを確認してください。
Note
Windows 認証は SQL Server ログインよりも優先されます。 Integrated Security を true に指定し、ユーザー名とパスワードも指定した場合、ユーザー名とパスワードは無視され、Windows 認証が使用されます。
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 型の表現を指定します。 Type System Version
キーワードの詳細については、「SqlConnection.ConnectionString」を参照してください。
SQL Server Express ユーザー インスタンスへの接続とアタッチ
ユーザー インスタンスは、SQL Server Express の機能の 1 つです。 最小限の特権しか持たないローカル Windows アカウントで実行しているユーザーが、SQL Server データベースにアタッチできます。この場合、管理特権は不要です。 ユーザー インスタンスは、サービスとしてではなく、ユーザーの Windows 資格情報で実行されます。
ユーザー インスタンスの使用について詳しくは、「SQL Server Express ユーザー インスタンス」をご覧ください。
TrustServerCertificate の使用
TrustServerCertificate
キーワードは、SQL Server インスタンスに接続するときに使用されます。 TrustServerCertificate
が true
に設定されている場合は、トランスポート層で TLS/SSL を使用してチャネルを暗号化し、証明書チェーンで信頼性を検証する処理をバイパスします。
- Microsoft.Data.SqlClient 2.0 より前のバージョンでは、
Encrypt
がFalse
に設定されていると同時にサーバー証明書が検証されていない場合、この設定は無視されます。 - Microsoft.Data.SqlClient バージョン 2.0 以降では、
Encrypt
がFalse
に設定されている場合であっても、サーバーによって暗号化が強制されているときは、証明書の検証を実行するかどうかが制御されます。 - Microsoft.Data.SqlClient バージョン 5.0 以降では、
Encrypt
がStrict
に設定されている場合は、この設定は無視されます。 サーバー証明書は常にStrict
モードで検証されます。
詳細については、「Encryption and certificate validation」 (暗号化と証明書の検証) を参照してください。
"TrustServerCertificate=true;"
HostNameInCertificate
Microsoft.Data.SqlClient バージョン 5.0 以降、HostNameInCertificate は新しい接続オプションです。 サーバー証明書の検証を行うと、証明書内の共通名 (CN) またはサブジェクト代替名 (SAN) が接続先のサーバー名と一致していることを確認できます。 DNS エイリアスなどの場合、サーバー名が CN や SAN と一致しないこともあります。 HostNameInCertificate 値を使うと、サーバー証明書内で別の予期される CN または SAN を指定できます。
"HostNameInCertificate=myserver.example.com"
ServerCertificate
Microsoft.Data.SqlClient バージョン 5.1 以降では、ServerCertificate
は新しい接続オプションです。 ServerCertificate
接続設定の既定値は空の文字列です。 Encrypt
が Mandatory
または Strict
に設定されている場合は、ServerCertificate
を使用して、サーバーの TLS 証明書と一致する証明書ファイルへのファイル システム上のパスを指定できます。 有効な証明書は、指定された証明書と完全に一致します。 受け付けられる証明書の形式は PEM、DER、CER です。 次に例を示します。
"Data Source=...;Encrypt=Strict;ServerCertificate=C:\certificates\server.cer"
暗号化を有効にする
サーバー上で証明書がプロビジョニングされていないときに暗号化を有効にするには、[サーバー証明書を信頼する] 接続プロパティを True
に設定する必要があります。 この場合、検証可能な証明書がサーバー上でプロビジョニングされていないため、暗号化には検証を伴わない自己署名入りのサーバー証明書が使用されます。
SQL Server で構成されたセキュリティのレベルを、アプリケーションの設定によって緩和することはできませんが、必要に応じて強化することはできます。 アプリケーションでは、TrustServerCertificate
と Encrypt
キーワードを true
に設定すると暗号化を要求できます。これにより、サーバー証明書がプロビジョニングされていない場合でも暗号化が行われることが保証されます。 ただし、クライアントの構成内で TrustServerCertificate
が有効になっていない場合は、プロビジョニングされたサーバー証明書が引き続き必要です。
次の表ですべてのケースを説明します。
接続文字列または属性の暗号化 | Trust Server Certificate 接続文字列/属性 | 結果 |
---|---|---|
No/Optional | 無視 | 暗号化は行われません。 |
Yes/Mandatory | いいえ | 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。 |
Yes/Mandatory | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
Strict1 | 無視 | 暗号化は常に行われ、検証可能なサーバー証明書を使う必要があります。そうでない場合は接続の試行に失敗します。 |
1 厳密な暗号化は、Microsoft.Data.SqlClient バージョン 5.0 以降でのみ使用できます。
以前のバージョンでの動作を含め、詳細については、「暗号化と証明書の検証」を参照してください。
関連項目
接続文字列
暗号化と証明書の検証
データ ソースへの接続
Microsoft ADO.NET for SQL Server