この記事では、Microsoft OLE DB Driver 19 for SQL Server とそれ以前のバージョンの間の破壊的変更について説明します。
ヒント
MSOLEDBSQL19 (Microsoft OLE DB Driver 19 for SQL Server) は、現在推奨されている OLE DB ドライバーです。 TDS 8.0 と最新のセキュリティ機能をサポートしています。 バージョン19.2.0以降のバージョンはTLS 1.3もサポートしています。 接続文字列で Provider=MSOLEDBSQL19 を使用します。
変更の概要
| Area | バージョン18およびそれ以前のバージョン | バージョン19以降のバージョン |
|---|---|---|
既定の暗号化 (Encrypt) 設定 |
no (暗号化なし、またはサーバーで暗号化を必要とすることはできません) |
Mandatory (暗号化が必要) |
Encrypt プロパティの種類 |
VT_BOOL |
VT_BSTR |
Encrypt 有効な値 |
no/yes |
no/yes/true/false/Optional/Mandatory/Strict |
| 証明書の検証 | クライアント セット時にスキップされる Encrypt=no |
暗号化が発生したときに常に評価される |
| ドライバー名 | MSOLEDBSQL |
MSOLEDBSQL19 |
| CLSID |
MSOLEDBSQL_CLSID (レガシー) |
MSOLEDBSQL_CLSID (ヘッダーで更新) |
Warnung
ActiveDirectoryPassword 認証は非推奨です。 バージョン 18 から 19 に移行し、 Authentication=ActiveDirectoryPasswordを使用している場合は、より安全な認証方法に移行することを計画してください。 代替手段については、「 非推奨の認証方法 」を参照してください。
暗号化プロパティの変更
プロパティの種類の変更を暗号化する
ドライバープロパティSSPROP_INIT_ENCRYPTVT_BOOLからVT_BSTRに変更されます。
| 接続文字列 | バージョン 18 の値 | バージョン 19 の値 |
|---|---|---|
供給者: Encrypt |
no/yes |
no/yes/true/false/Optional/Mandatory/Strict |
IDataInitialize: Use Encryption for Data |
true/false |
no/yes/true/false/Optional/Mandatory/Strict |
値マッピング:
| Mode | 同等の値 | 行動 |
|---|---|---|
Optional |
no、false |
サーバーで必要な場合を除き、暗号化されません |
Mandatory (既定値) |
yes、true |
暗号化された接続が必要 |
Strict |
(同等の値はありません) | TDS 8.0暗号化;SQL Server 2022以降のバージョンが必要です |
ヒント
バージョン 19.2.0 以降では、TDS 8.0 接続では、SQL Server 2022 以降への接続時に TLS 1.3 を使用できます。 このバージョンでは、 ServerCertificate プロパティも追加されました。 詳細については、TLS 1.3 サポートに関する記事を参照してください。
下位互換性のために、バージョン 19 では、新しい値 (yes/noOptional/) に加えて、バージョン 18 のすべての値 (Mandatory/Strict) を受け入れます。
既定の暗号化動作
| バージョン | 既定値 | 結果 |
|---|---|---|
| 18およびそれ以前のバージョン | no |
既定では暗号化されていない接続 |
| 19 以降のバージョン | Mandatory |
既定で暗号化された接続 |
バージョン 18 の動作を復元するには、接続文字列に次のいずれかのオプションを追加します。
- 供給者:
Encrypt=Optional; - IDataInitialize:
Use Encryption for Data=Optional;
証明書の検証の動作
| Scenario | バージョン 18 | バージョン19以降のバージョン |
|---|---|---|
クライアント セット Encrypt=no、サーバーが暗号化を強制しない |
検証なし | 検証なし |
クライアント セット Encrypt=no、サーバーが強制的に暗号化する |
Trust Server Certificate
無視 |
Trust Server Certificate
評価 |
クライアント セット Encrypt=yes |
Trust Server Certificate 評価 |
Trust Server Certificate 評価 |
互換性に関する注意事項
サーバーが暗号化を強制し、信頼されていない証明書を使用すると、既定の設定を使用するバージョン 19 クライアントは接続に失敗します。
Trust Server Certificate設定を更新するか、信頼された証明書を使用します。
TrustServerCertificate バージョン 19 では 削除されませんでした 。 このオプションは引き続き機能します。 バージョン 18 では、サーバーが暗号化を強制した場合でも、 Encrypt が no に設定されている場合、この設定は無視されました。 バージョン 19 では、暗号化されたすべてのシナリオで TrustServerCertificate が評価されるようになりました。
19.4.1 より前のバージョン 19 ドライバーには、以前に v18 がインストールされていたシステムでTrustServerCertificateするno レジストリ オプションを設定できるインストーラーの問題がありました。 この問題が発生すると、ドライバーはより安全なレジストリ設定を使用します。これにより、接続文字列オプションが無効に見える可能性があります。 この問題は、バージョン 19.4.1 で解決されました。 v19 の新しいインストール (v18 が存在しない) では、レジストリ オプションが常に正しく既定で yes。 詳細については、レジストリの設定に関する記事を参照してください。
キーワードの形式はインターフェイスによって異なります。
- プロバイダー接続文字列では、スペースを使用しません。
TrustServerCertificate=yes; - IDataInitialize 接続文字列では、スペースを使用します。
Trust Server Certificate=yes;
詳細については、「 OLE DB での暗号化と証明書の検証」を参照してください。
Force Protocol Encryption のレジストリ設定
[Force Protocol Encryption]\(プロトコル暗号化の強制\) レジストリ設定では、暗号化モードにマップされる数値が使用されます。
| レジストリ値 | 暗号化モード | Description |
|---|---|---|
0 |
Optional |
サーバーで必要な場合にのみ暗号化する |
1 |
Mandatory |
必要な暗号化 |
2 |
Strict |
TDS 8.0 暗号化 |
ドライバーは、レジストリ設定と接続プロパティの間で最も安全なオプションを使用します。 レジストリ キーの場所については、「 レジストリ設定」を参照してください。
ドライバー名の変更
バージョン 19 では、バージョン 18 とのサイド バイ サイド インストールがサポートされています。 ドライバー名には、区別のためにメジャー バージョン番号が含まれています。
| インターフェイス | バージョン 18 | バージョン 19 |
|---|---|---|
| Provider キーワード | MSOLEDBSQL |
MSOLEDBSQL19 |
| CLSID 定数 | MSOLEDBSQL_CLSID |
MSOLEDBSQL_CLSID ( msoledbsql.h で更新) |
| UI の表示名 | Microsoft OLE DB ドライバー for SQL Server | Microsoft OLE DB Driver 19 for SQL Server |
移行の手順
- 更新された
msoledbsql.hヘッダーをプロジェクトに含めます。 -
IDBInitializeの場合: 変更は必要ありません (ヘッダーで CLSID が更新されました)。 -
IDataInitializeの場合:Provider=MSOLEDBSQLをProvider=MSOLEDBSQL19に変更します。 - UI ツール (SSMS、データ リンク プロパティ) の場合: Microsoft OLE DB Driver 19 for SQL Server を選択します。
接続文字列の例
バージョン 18 (以前):
Provider=MSOLEDBSQL;Server=myserver;Database=mydb;Trusted_Connection=yes;
バージョン 19 (以降):
Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Trusted_Connection=yes;
明示的な暗号化設定を使用するバージョン 19:
Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Encrypt=Mandatory;TrustServerCertificate=no;
厳密な暗号化 (TDS 8.0) を使用したバージョン 19:
Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Encrypt=Strict;ServerCertificate=C:\certs\server.cer;
新しいバージョン 19 のプロパティ
バージョン 19 では、 Strict 暗号化モードを使用した拡張証明書検証のプロパティが導入されています。
HostNameInCertificate(v19.0.0以降のバージョン)
サーバーの TLS/SSL 証明書に対して検証するホスト名を指定します。 接続文字列内のサーバー名が証明書の共通名 (CN) またはサブジェクトの別名 (SAN) と異なる場合は、このプロパティを使用します。
| インターフェイス | プロパティ |
|---|---|
| Provider キーワード | HostNameInCertificate |
| IDataInitialize キーワード | Host Name In Certificate |
| OLE DB プロパティ | SSPROP_INIT_HOST_NAME_CERTIFICATE |
注
Trust Server Certificateが有効になっている場合、このプロパティは無視されます。
Encrypt=Strictすると、証明書は常に検証されます。
ServerCertificate(バージョン19.2.0以降)
正確な証明書一致のための証明書ファイル (PEM、DER、または CER 形式) へのパスを指定します。 ドライバーは、TLS ハンドシェイク中に、この証明書をサーバーの証明書と比較します。
| インターフェイス | プロパティ |
|---|---|
| Provider キーワード | ServerCertificate |
| IDataInitialize キーワード | Server Certificate |
| OLE DB プロパティ | SSPROP_INIT_SERVER_CERTIFICATE |
Important
ServerCertificate は、 Encrypt=Strictの場合にのみ使用できます。
MandatoryまたはOptional暗号化で使用しようとすると、接続エラーが発生します。
非推奨の認証方法
ActiveDirectoryPassword
ActiveDirectoryPassword認証方法 (Microsoft Entra ID パスワード認証) は非推奨です。 この認証は 、OAuth 2.0 リソース所有者パスワード資格情報 (ROPC) の付与に基づいています。これは多要素認証 (MFA) と互換性が無く、セキュリティ上のリスクがあります。
Warnung
Microsoft は、悪意のある攻撃からユーザーを保護するために、この危険度の高い認証フローから離れています。 このオプションを削除する前に、より安全な認証方法に移行することを計画してください。 詳細については、「 Azure の必須多要素認証の計画」を参照してください。
推奨される代替手段
| Scenario | 推奨される認証 | 接続文字列キーワード |
|---|---|---|
| 対話型ユーザー コンテキスト | 多要素認証 | Authentication=ActiveDirectoryInteractive |
| Azure で実行されているアプリ | マネージド ID | Authentication=ActiveDirectoryMSI |
| ユーザーなしのサービス/デーモン | サービス プリンシパル | Authentication=ActiveDirectoryServicePrincipal |
詳細については、「 Microsoft Entra ID の使用」を参照してください。
トラブルシューティング
証明書検証エラーで接続が失敗する
現象: 証明書検証エラーまたは信頼されていない証明書メッセージで接続が失敗する。
原因: バージョン 19 の既定値は Encrypt=Mandatory であり、有効なサーバー証明書が必要です。 バージョン 18 の既定値は Encrypt=no (暗号化されていません)。
解決策:
- 推奨: 信頼された証明書をサーバーにインストールします。
-
開発のみ: 接続文字列に
TrustServerCertificate=yes;を追加します (運用環境には推奨されません)。 -
フォールバック: バージョン 18 の動作を復元する
Encrypt=Optional;を追加します (セキュリティが低下します)。
"サーバー証明書は厳密な暗号化でのみ使用できます" で接続に失敗する
現象: ServerCertificate プロパティを使用すると、接続が失敗します。
原因: ServerCertificate プロパティには Encrypt=Strictが必要です。
解決策: 接続文字列から ServerCertificate を削除するか、 Encrypt=Strict;に変更します。
Encrypt プロパティの設定時にアプリケーションVT_BOOLエラーが発生する
現象: ブール値を使用した SSPROP_INIT_ENCRYPT の設定が失敗する。
原因: バージョン 19 では、プロパティの種類が VT_BOOL から VT_BSTR に変更されました。
解決策: ブール値の代わりに文字列値 ("Mandatory"、 "Optional"、 "Strict"、 "yes"、 "no") を使用します。
アップグレード後にプロバイダーが見つかりません
現象: アプリケーションが "プロバイダーが見つかりません" または同様のエラーで失敗します。
原因: バージョン 19 では、別のプロバイダー名 (MSOLEDBSQL19) が使用されます。
解決策:
- 接続文字列を
Provider=MSOLEDBSQLからProvider=MSOLEDBSQL19に更新します。 - CLSID で
msoledbsql.hを使用する場合は、更新されたIDBInitializeヘッダーを含めます。