この記事では、Microsoft ODBC Driver 18 for SQL Serverとバージョン17間の不規則な変更について説明します。
バージョン17からバージョン18にアップグレードするほとんどのアプリケーションは、接続がデフォルトで暗号化されているという単一の変更によって影響を受けます。 アップグレード後にアプリケーションが接続しなくなった場合は、まず 「デフォルトの暗号化動作 」を読んでください。
変更の概要
| 領域 | バージョン 17 | バージョン18以降のバージョン |
|---|---|---|
デフォルトの Encrypt 設定 |
no |
yes |
Encrypt 受け入れられた価値観 |
yes、no |
yes、no、Mandatory、Optional、Strict |
| 暗号化モード | オンかオフか | オフ、オン、厳格 |
| サーバー証明書の検証 | 暗号化を要求しない限り起こりません | 暗号化がデフォルトでオンになっているため、デフォルトで発生します |
| 接続文字列キーワード | 基本セット | ベースセットと新しいキーワード |
暗号化の変更
既定の暗号化動作
バージョン17では、暗号化を依頼するかサーバーが要求しない限り接続は暗号化されません。 バージョン18以降のバージョンでは、接続はデフォルトで暗号化されています。
ドライバーは接続を暗号化するたびにサーバー証明書を検証するため、自己署名または信頼できない証明書でサーバーに接続したアプリケーションは、バージョン17で成功裏に接続し、バージョン18で失敗します。 この失敗は認証エラーではなく、証明書検証エラーです。
解決方法は3つあり、安全度が高い順に挙げられます。
- クライアントが信頼するサーバーに証明書をインストールします。 このオプションが推奨されており、暗号化と検証の両方を保持する唯一の方法です。
- 暗号化を継続し、ドライバーにどの名前を検証するかを
HostNameInCertificateかServerCertificate設定で指示してください。 - 暗号化をオフにしてバージョン17のデフォルトを回復するには、接続文字列に
Encrypt=noを追加してください。
Caution
TrustServerCertificate=yes設定は接続を暗号化しますが、証明書検証は無効化され、接続は中間攻撃にさらされます。 信頼できる証明書を好みます。
暗号化の価値
バージョン17は yes と noのみを受け入れています。 バージョン18以降のバージョンではこれらの値が受け入れられ、さらに3つが追加されています:
| Value | これは | Behavior |
|---|---|---|
Mandatory |
yes |
接続は暗号化されています。 |
Optional |
no |
サーバーが要求しない限り、接続は暗号化されていません。 |
Strict |
なし | 接続はTDS 8.0暗号化を使用しています。 |
Strict バージョン17に相当するものはありません。 TDS 8.0を選ぶ唯一の値であり、暗号化はログイン交換中に交渉されます。
バージョン17の暗号化動作を復元する
バージョン17のデフォルト動作を復元するには、 Encrypt を明示的に設定してください:
Driver={ODBC Driver 18 for SQL Server};Server=<server>;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=no;
値を明示的に設定することは、バージョン17でも有益で、接続文字列が両方のバージョンで同じように振る舞うからです。
新しい接続文字列キーワード
バージョン18では、バージョン17では認識されない以下の接続文字列キーワードが追加されています:
| キーワード | Purpose |
|---|---|
ConcatNullYieldsNull |
はnull値を連結することでnullが得られるかどうかを制御します。 |
GetDataExtensions |
ドライバーが有効にする拡張機能 SQLGetData 制御します。 |
HostNameInCertificate |
サーバーのTLS証明書で検証するホスト名を指定します。 |
IpAddressPreference |
ドライバーが最初に試行するIPアドレスファミリーを指定します。 |
LongAsMax |
長いデータ型を max の対応物にマッピングします。 |
RetryExec |
失敗したクエリに対してリトライルールを設定しましょう。 |
ServerCertificate |
サーバーの検証を基準に認証するための証明書ファイルへのパスを指定します。 |
個別のキーワードはバージョン18の異なるリリースで導入されました。 各キーワードを導入したリリースおよび完全なキーワード参照については、ODBC DSNおよび接続文字列キーワードを参照してください。