この記事では、接続文字列やDSNのキーワード、SQLSetConnectAttrおよびSQLGetConnectAttrの接続属性をSQL ServerのODBCドライバーで一覧にしています。
サポートされたDSNおよび接続文字列キーワードおよび接続属性
以下の表は、各プラットフォームで使用可能なキーワードと属性の一覧を示しています(L: Linux、M: macOS、W: Windows)。 キーワードまたは属性を選択すると、詳細が表示されます。
以下に、SQL Server Native Client で接続文字列キーワードを使用する、SQLSetConnectAttr、および SQLSetConnectAttr 関数 に記載されていない接続文字列キーワードと接続属性をいくつか示します。
説明
データソースの説明。
SQL_COPT_SS_ANSI_OEM
データの ANSI から OEM への変換を制御します。
| 属性値 | 説明 |
|---|---|
SQL_AO_OFF (既定値) |
翻訳は終わっていません。 |
SQL_AO_ON |
変換が完了しました。 |
SQL_COPT_SS_AUTOBEGINTXN
バージョン17.6以降、オートコミットがオフの状態で、ROLLBACKまたはCOMMIT後の自動BEGIN TRANSACTIONをこのオプションで制御できます。
| 属性値 | 説明 |
|---|---|
SQL_AUTOBEGINTXN_ON (既定値) |
COMMIT または BEGIN TRANSACTION の後の自動 ROLLBACK。 |
SQL_AUTOBEGINTXN_OFF |
ROLLBACKやCOMMIT後に自動BEGIN TRANSACTIONはありません。 |
SQL_COPT_SS_FALLBACK_CONNECT
SQL Serverのフォールバック接続の使用を制御します。 このオプションは現在サポートされていません。
| 属性値 | 説明 |
|---|---|
SQL_FB_OFF (既定値) |
フォールバック接続を無効にします。 |
SQL_FB_ON |
フォールバック接続を可能にします。 |
新しい接続文字列キーワードと接続属性
接続文字列キーワードの統一
バージョン18.7からは、ODBCドライバ for SQL ServerがMicrosoft.Data.SqlClientデータプロバイダーのプロパティ名に対応する追加の接続文字列キーワードをサポートします。 このサポートにより、アプリケーションはキーワード名を変更することなく、Microsoft SQL Serverのデータプロバイダーやドライバ間で単一の接続文字列を使用できるようになります。
キーワードの別名
各エイリアスは、対応するODBCキーワードと同じオプションを設定します:
| 別名 | 同等のODBCキーワード | 説明 |
|---|---|---|
MultipleActiveResultSets |
MARS_Connection |
複数のアクティブ結果セット(MARS)をオンまたはオフにします。
Yes または No を指定できます。 |
WorkstationID |
WSID |
ワークステーションIDを設定します。通常はアプリケーションを実行するコンピュータのネットワーク名です。
HOST_NAME() はこの値を返します。 |
FailoverPartner |
Failover_Partner |
データベースミラーリングのためのフェイルオーバーパートナーサーバーを指定します。 Windowsのみでサポートされています。 |
運転手はこれらのエイリアスに以下のルールを適用します。
-
大文字と小文字を区別しない: ドライバーは大文字と小文字に関係なくエイリアスを照合します。 たとえば、
multipleactiveresultsetsはMultipleActiveResultSetsと同じように動作します。 - 最初に出現する方が勝ちます: エイリアスとそれに相当するODBCキーワードが同じオプションを設定します。 もし接続文字列に両方が含まれている場合、ドライバーは最初の値を使い、その後のオプションの値は無視します。
- 入力のみ: ドライバーはエイリアスを入力として受け入れます。 出力接続文字列を返す場合や設定をデータソース名(DSN)に書き込む際、同等のODBCキーワードを使用します。
-
プラットフォーム対応:このドライバーはWindows、Linux、macOSで
MultipleActiveResultSetsおよびWorkstationIDをサポートしています。 ドライバーはWindowsのみでFailoverPartnerとFailover_Partnerをサポートしています。
ConnectTimeout キーワード
ConnectTimeoutキーワードはSQL_ATTR_LOGIN_TIMEOUT接続属性と同じログインタイムアウトを設定します。 アプリケーションはSQLSetConnectAttrを呼び出す代わりに、接続文字列でタイムアウトを指定することができます。
アプリケーションが接続関数を呼び出す前に明示的にSQL_ATTR_LOGIN_TIMEOUTを設定した場合、接続属性がConnectTimeout 接続文字列値より優先されます。
-
単位とデフォルト: この値はログイン完了までの待機秒数を指定します。 既定値は
15秒です。 -
タイムアウトなし:
0の値は運転手に無期限の待機を指示します。 -
最大値とクランプ: 最大値は
65534です。 負の値、65534を超える値、またはサポートされる数値範囲を超える値を入力すると、ドライバーは65534を使用します。 ドライバーが値をクランプし、それ以外は接続が正常に成功した場合、ドライバーは01S02をSQL_SUCCESS_WITH_INFO(オプション値が変更されました)警告付きで返します。 - 検証: ドライバーは空の値や数値でない値を拒否します。
-
DSN サポート: Windows では、アプリケーションはデータ ソース名(DSN)に
ConnectTimeoutを保存したり取得したりできます。 -
プラットフォーム対応:ドライバーはWindows、Linux、macOSで
ConnectTimeoutをサポートしています。
例
以下の接続文字列は統一キーワードの綴りを使用しています:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:myserver.database.windows.net;Database=mydb;UID=myuser;PWD=mypassword;MultipleActiveResultSets=Yes;WorkstationID=app-node-01;ConnectTimeout=30;
前の接続文字列内のエイリアスは、元のODBCキーワードと同じオプションを以下の接続文字列で構成します:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:myserver.database.windows.net;Database=mydb;UID=myuser;PWD=mypassword;MARS_Connection=Yes;WSID=app-node-01;
両方の文字列はMARSを有効にし、ワークステーションIDを app-node-01に設定します。 最初の文字列もログイン完了まで最大30秒待ちます。
ConnectTimeout 以前のバージョンには対応するものはありません。 以前のバージョンでログインタイムアウトを設定するには、SQL_ATTR_LOGIN_TIMEOUTでSQLSetConnectAttrに連絡してください。
認証 - SQL_COPT_SS_AUTHENTICATION
SQL Server に接続するときに使用する認証モードを設定します。 詳細情報については、「ODBC ドライバーでの Microsoft Entra ID の使用」をご覧ください。
| キーワード値 | 属性値 | 説明 |
|---|---|---|
SQL_AU_NONE (既定値) |
未設定。 認証モードは、他の属性の組み合わせによって決まります。 | |
SqlPassword |
SQL_AU_PASSWORD |
ユーザー名とパスワードを使用する SQL Server 認証。 |
ActiveDirectoryIntegrated |
SQL_AU_AD_INTEGRATED |
Microsoft Entra 統合認証。 |
ActiveDirectoryInteractive |
SQL_AU_AD_INTERACTIVE |
Microsoft Entra インタラクティブ認証。 |
ActiveDirectoryMsi |
SQL_AU_AD_MSI |
Microsoft Entra マネージド ID 認証。 ユーザー割り当てのアイデンティティの場合、 UID はユーザーアイデンティティのオブジェクトIDに設定されます。 |
ActiveDirectoryServicePrincipal |
SQL_AU_AD_SPA |
Microsoft Entra サービス プリンシパル認証。
UID はサービスプリンシパルのクライアントIDに設定されています。
PWD はクライアントの秘密に設定されています。 |
ActiveDirectoryPassword |
SQL_AU_AD_PASSWORD |
[非推奨]Microsoft Entra パスワード認証。ActiveDirectoryPassword は非推奨とされます。 詳細については、ActiveDirectoryPassword は非推奨ですを参照してください。 |
SQL_AU_RESET |
未設定。 すべての DSN または接続文字列の設定をオーバーライドします。 |
注
Authentication キーワードまたは属性を使用する場合は、接続文字列、DSN、または接続属性で Encrypt 設定を明示的に目的の値に指定してください。 詳しくは、「Using Connection String Keywords with SQL Server Native Client (SQL Server Native Client での接続文字列キーワードの使用)」をご覧ください。
ColumnEncryption - SQL_COPT_SS_COLUMN_ENCRYPTION
透過的な列の暗号化を制御します (Always Encrypted)。 詳しくは、「SQL Server 用 ODBC ドライバーと共に Always Encrypted を使用する」をご覧ください。
| キーワード値 | 属性値 | 説明 |
|---|---|---|
Enabled |
SQL_CE_ENABLED |
Always Encrypted を有効にします。 |
Disabled (既定値) |
SQL_CE_DISABLED |
Always Encrypted を無効にします。 |
SQL_CE_RESULTSETONLY |
解読のみを有効にします (結果と戻り値)。 |
ConcatNullYieldsNull(NULL を連結する場合の動作設定) - SQL_COPT_SS_CONCAT_NULL
文字列を連結する際の NULL の ISO 処理の使用を制御します。 詳細については、SET CONCAT_NULL_YIELDS_NULLを参照してください。
| キーワード値 | 属性値 | 説明 |
|---|---|---|
Yes (既定値) |
SQL_CN_ON |
NULL 連結は NULLをもたらします。 |
No |
SQL_CN_OFF |
NULL 連結すると文字列が得られます。 |
Encrypt
接続時にネットワーク上で TLS 暗号化が使用されるかどうかを指定します。 バージョン17は yes と noを受け入れています。 バージョン18.0以降のバージョンでは、mandatoryをyesの同義語として、optionalをstrictnoの同義語として受け入れ、TDS 8.0暗号化を選択し、バージョン17に対応するものは存在しません。 デフォルト値はバージョン18.0以降では yes され、以前のバージョンでは no されています。
Encrypt の設定に関係なく、サーバー ログイン資格情報 (ユーザー名およびパスワード) は、常に暗号化されます。
Encrypt、TrustServerCertificate、サーバー側のForce Encryption設定によって、ネットワーク上で接続が暗号化されているかどうかが決まります。 次の表は、これらの設定の効果を示しています。
ODBC Driver 18 以降
| 暗号化の設定 | [Trust Server Certificate] | サーバーの強制的な暗号化 | 結果 |
|---|---|---|---|
| いいえ | いいえ | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
| いいえ | はい | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
| はい | いいえ | いいえ | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| はい | はい | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| いいえ | いいえ | はい | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| いいえ | はい | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| はい | いいえ | はい | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| はい | はい | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| 厳格 | - | - |
TrustServerCertificate は無視されます。 サーバー証明書は確認されます。クライアントとサーバー間で送信されるデータは暗号化されます。 |
注
Strict値はTDS 8.0接続をサポートするサーバーに対してのみ利用可能です。
ODBC Driver 17 以前のバージョン
| 暗号化の設定 | [Trust Server Certificate] | サーバーの強制的な暗号化 | 結果 |
|---|---|---|---|
| いいえ | いいえ | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
| いいえ | はい | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
| はい | いいえ | いいえ | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| はい | はい | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| いいえ | いいえ | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| いいえ | はい | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| はい | いいえ | はい | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
| はい | はい | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
TransparentNetworkIPResolution - SQL_COPT_SS_TNIR
ODBCドライバーのレガシーマルチIPフォールバックであるTransparent Network IP Resolution機能を制御します。 この設定はMultiSubnetFailover=Yes時の接続順序に影響を与えません。これはAzure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQLデータベース、可用性グループのリスナー、フェイルオーバークラスターインスタンスで推奨される設定です。 詳細については、「 ODBCドライバーでの透過的なネットワークIP解決の使用 」または「 高可用性および災害復旧」をご覧ください。
| キーワード値 | 属性値 | 説明 |
|---|---|---|
Enabled (既定値) |
SQL_IS_ON |
透過的なネットワークIP解決を可能にします。 |
Disabled |
SQL_IS_OFF |
透過的なネットワーク IP の解決を無効にします。 |
UseFMTONLY
SQL Server 2012 以降に接続するときのメタデータのSET FMTONLYの使用を制御します。
| キーワード値 | 説明 |
|---|---|
No (既定値) |
メタデータには、可能であれば sp_describe_first_result_set を使用してください。 |
Yes |
メタデータには SET FMTONLY を使用します。 |
レプリケーション
ODBC Driver バージョン 17.8 以降でのレプリケーション ログインの使用を指定します。
| キーワード値 | 説明 |
|---|---|
No (既定値) |
レプリケーションログインは使われていません。 |
Yes |
NOT FOR REPLICATION オプションを使用したトリガーは、接続で起動されません。 |
RetryExec
構成可能な再試行ロジックは、バージョン 18.1 以降で使用できます。 これにより、構成可能な条件に基づいて、特定の ODBC 関数の呼び出しが自動的に再実行されます。 接続文字列でRetryExecキーワードとリトライルールのリストを使えば、この機能を有効にしてください。 各リトライルールは、エラーマッチ、リトライポリシー、クエリマッチの3つのコロン分離コンポーネントで構成されています。
クエリマッチは、特定の実行で使用するリトライルールを決定します。 これは、入ってくるコマンドテキスト(SQLExecDirect)または文オブジェクト内の準備済みコマンドテキスト(SQLExecute)と一致します。 複数のルールが一致する場合は、リストの最初のマッチングルールが使用されます。 この動作により、規則を一般性が上がる順にリストアップできます。 ルールが一致しない場合は再挑戦は適用されません。
実行中にエラーが発生し、該当する再試行ルールがある場合、そのエラーマッチが実行の再試行の有無を決定します。
RetryExecキーワードの値は、セミコロンで区切られたリトライルールのリストです。
RetryExec={rule1;rule2}
再試行ルールは次のようになります: <errormatch>:<retrypolicy>:<querymatch>
エラーマッチ:カンマ区切られたエラーコードのリスト。 例えば、
1000,2000を指定すると再試行したいエラーコードが表示されます。再試行ポリシー:次の再試行までの遅延を指定します。 最初のパラメータはリトライ回数、2つ目のパラメータは遅延です。 例えば、
3,10+7は10秒から始まる3回の試行を意味し、以降の再試行のたびに7秒ずつ増えます。+7を指定しなければ、その後の再試行は指数関数的に倍増します。クエリマッチ:マッチングしたいクエリを指定します。 何も指定しなければ、そのルールはすべてのクエリに適用されます。
SELECTを指定すると、SELECTで始まるすべてのクエリを指す。
接続文字列として使うために3つの成分を組み合わせる方法:
RetryExec={1000,2000:3,10+7:SELECT}
このルールは、SELECTで始まるクエリで誤りが1000・2000した場合、最初の遅延10秒で2回再試行し、その後の1回の試みごとに7秒を加えることを意味します。
使用例
40501,40540:4,5
誤り 40501 および 40540の場合は、最大4回まで再試行し、初期遅延は5秒、再試行の間は指数関数的に倍増します。 このルールはすべてのクエリに適用されます。
49919:2,10+:CREATE
CREATEで始まるクエリでエラー49919が発生した場合、最大でも2回だけやり直してください。最初は10秒後、次に20秒後です。
49918,40501,10928:5,10+5:SELECT c1
SELECT c1で始まるクエリでエラー49918、40501、10928がある場合は、最大5回まで再試行し、最初の再試行で10秒待ち、その後5秒待ち時間が増やされます。
以下の3つのルールを接続文字列でまとめて指定します。
RetryExec={49918,40501,10928:5,10+5:SELECT c1;49919:2,10+:CREATE;40501,40540:4,5}
最も一般的な(マッチオール)ルールを最後に置き、その前の2つのより具体的なルールがそれぞれのクエリにマッチできるようにします。
クライアント証明書
ループバック接続による認証証明書を指定します。 このオプションはLinuxのSQL Server on Linuxでのみ利用可能です。 オプションは次のとおりです。
| オプション値 | 説明 |
|---|---|
sha1:<hash_value> |
ODBCドライバーはSHA1ハッシュを使ってWindows証明書ストア内の証明書を特定します。 |
subject:<subject> |
ODBCドライバーは、主題を用いてWindows証明書ストア内の証明書を探します。 |
file:<file_location>[,password:<password>] |
ODBC ドライバーでは、証明書ファイルが使用されます。 |
証明書が PFX 形式で、 PFX 証明書内の秘密鍵がパスワード保護されている場合は、 password キーワードを含めてください。
PEMおよびDER形式の証明書については、ClientKey属性を含めてください。
ClientKey
ClientCertificate属性で指定されたPEMまたはDER証明書の秘密鍵のファイル位置を指定します。 形式:
| オプション値 | 説明 |
|---|---|
file:<file_location>[,password:<password>] |
秘密鍵ファイルの場所を指定します。 |
秘密鍵ファイルがパスワード保護されている場合は、 password キーワードを含めてください。 パスワードに , 文字が含まれている場合は、各文字の直後に1文字追加 , 字を加えます。 例えば、パスワードがa,b,cされている場合、接続文字列内の逃げ出したパスワードはa,,b,,cされます。
証明書内のホスト名
暗号化交渉時にサーバーの証明書に期待されるホスト名を指定します。Addr、Address、Serverから派生したデフォルト値と異なる場合。
ServerCertificateオプションを使うとHostnameInCertificateオプションは無視されます。
IP アドレスの優先設定
バージョン18.1以降は、このオプションを使って接続の優先順位をつけるIPアドレスの種類を指定します。
選択肢は IPv4First、 IPv6First、 UsePlatformDefaultです。
UsePlatformDefault サーバー名を解決するためのシステムコールで提供されたアドレスの順番で接続します。 デフォルト値は IPv4Firstで、これは以前のバージョンの挙動に対応しています。
サーバー証明書
バージョン18.1からは、厳密暗号化モードでこのオプションを使います。
ServerCertificateキーワードを使って、SQL Server TLS/SSL証明書と照合する証明書ファイルへのパスを指定します。 マッチングは標準的な証明書検証(有効期限、ホスト名、信頼チェーンなど)の代わりに行われます。 受け入れられる証明書の形式は PEM、DER、CER です。 このオプションを指定すると、SQL Server証明書が提供されたServerCertificateが完全に一致しているかどうかを確認します。
SQL_COPT_SS_ACCESS_TOKEN
認証にはMicrosoft Entraのアクセストークンを使いましょう。 詳細情報については、「ODBC ドライバーでの Microsoft Entra ID の使用」をご覧ください。
| 属性値 | 説明 |
|---|---|
NULL (既定値) |
アクセストークンは提供されません。 |
ACCESSTOKEN* |
アクセス トークンへのポインター。 |
SQL_COPT_SS_CEKEYSTOREDATA
読み込まれたキーストア プロバイダー ライブラリと通信します。 透過的な列の暗号化を制御します (Always Encrypted)。 この属性には既定値はありません。 詳しくは、「カスタム キーストア プロバイダー」をご覧ください。
| 属性値 | 説明 |
|---|---|
CEKEYSTOREDATA * |
キーストア プロバイダー ライブラリ用の通信データ構造 |
SQL_COPT_SS_CEKEYSTOREPROVIDER
Always Encrypted 用のキーストア プロバイダー ライブラリを読み込むか、または読み込まれたキーストア プロバイダー ライブラリの名前を取得します。 詳しくは、「カスタム キーストア プロバイダー」をご覧ください。 この属性には既定値はありません。
| 属性値 | 説明 |
|---|---|
char * |
キーストア プロバイダー ライブラリへのパス |
SQL_COPT_SS_ENLIST_IN_XA
XA準拠のトランザクションプロセッサ(TP)でXAトランザクションを有効にするには、アプリケーションはSQL_COPT_SS_ENLIST_IN_XAとXACALLPARAMオブジェクトへのポインタを使ってSQLSetConnectAttrを呼び出す必要があります。 このオプションはWindows(17.3以降のバージョン)、Linux、macOSでサポートされています。
SQLSetConnectAttr(hdbc, SQL_COPT_SS_ENLIST_IN_XA, param, SQL_IS_POINTER); // XACALLPARAM *param
XAトランザクションをODBC接続のみに関連付けたい場合は、SQLSetConnectAttrを呼び出す際にポインタの代わりにSQL_COPT_SS_ENLIST_IN_XAで、TRUEまたはFALSEを付けてください。 この設定は、Windows でのみ有効であり、クライアント アプリケーションで XA 操作を指定するために使用することはできません。
SQLSetConnectAttr(hdbc, SQL_COPT_SS_ENLIST_IN_XA, (SQLPOINTER)TRUE, 0);
| 値 | 説明 | プラットフォーム |
|---|---|---|
XACALLPARAM 対象* |
XACALLPARAM オブジェクトを指すポインター。 |
Windows、Linux、macOS |
TRUE |
XA トランザクションを ODBC 接続に関連付けます。 関連するすべてのデータベース アクティビティは、XA トランザクションの保護下で実行されます。 | Windows |
FALSE |
トランザクションと ODBC 接続の関連付けを解除します。 | Windows |
XA トランザクションについて詳しくは、「XA トランザクションの使用」をご覧ください。
SQL_COPT_SS_LONGASMAX
長いデータ型を最大データ型としてサーバーに送信します。
| 属性値 | 説明 |
|---|---|
No (既定値) |
送信時に長いタイプを最大タイプに変換しないでください。 |
Yes |
送信時に、データを long 型から max 型に変換してください。 |
SQL_COPT_SS_SPID
接続のセッション ID を取得します。 このプロパティは、サーバーへの追加のラウンド トリップが発生しない点を除き、T-SQL @@SPID 変数と同じです。
| 属性値 | 説明 |
|---|---|
DWORD |
SPID |