適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio (19 以降のバージョン) の場合
SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
SQL Server は、常に、ログインに関連するネットワーク パケットを暗号化します。 起動時にサーバーに証明書がプロビジョニングされなかった場合、SQL Server は、ログイン パケットの暗号化に使用される自己署名証明書を生成します。
自己署名証明書では、セキュリティは保証されません。 暗号化されたハンドシェイクは、NT LAN Manager (NTLM) に基づいています。 セキュリティで保護された接続のために、検証可能な証明書を SQL Server にプロビジョニングする必要があります。 トランスポート層セキュリティ (TLS) は、証明書の検証によってのみセキュリティで保護することができます。
アプリケーションでは、接続文字列キーワードまたは接続プロパティを使用して、すべてのネットワーク トラフィックの暗号化を要求することもできます。 キーワードは、 IDbInitialize::Initialize
でプロバイダー文字列を使用する場合は ODBC および OLE DB の場合は "暗号化"、 IDataInitialize
で初期化文字列を使用する場合は ADO と OLE DB の場合は "データの暗号化を使用する" です。 これは、SQL Server Configuration Manager で [Force Protocol Encryption ]\(プロトコル暗号化の強制\) オプションを使用して構成したり、暗号化された接続を要求するようにクライアントを構成したりすることもできます。 既定では、接続のすべてのネットワーク トラフィックを暗号化するには、証明書がサーバーにプロビジョニングされている必要があります。 サーバー上の証明書を信頼するようにクライアントを設定すると、中間者攻撃に対して脆弱になります。 検証可能な証明書をサーバーに展開する場合は、証明書の信頼に関するクライアント設定を FALSE
に変更してください。
接続文字列キーワードの詳細については、「 SQL Server Native Client での接続文字列キーワードの使用」を参照してください。
証明書がサーバーにプロビジョニングされていない場合に暗号化を使用できるようにするには、SQL Server 構成マネージャーを使用して、[ プロトコル暗号化の強制 ] オプションと [ 信頼サーバー証明書 ] オプションの両方を設定できます。 この場合、検証可能な証明書がサーバーにプロビジョニングされていない場合、暗号化では検証なしで自己署名サーバー証明書が使用されます。
アプリケーションでは、 TrustServerCertificate
キーワードまたはその関連する接続属性を使用して、暗号化を確実に実行することもできます。 アプリケーション設定では、SQL Server クライアント構成マネージャーによって設定されるセキュリティ のレベルが低下することはありませんが、強化される可能性があります。 たとえば、クライアントに 対して Force Protocol Encryption が設定されていない場合、アプリケーションは暗号化自体を要求する可能性があります。 サーバー証明書がプロビジョニングされていない場合でも暗号化を保証するために、アプリケーションは暗号化と TrustServerCertificate
を要求する場合があります。 ただし、クライアントの構成内で TrustServerCertificate
が有効になっていない場合は、プロビジョニングされたサーバー証明書が引き続き必要です。 次の表ですべてのケースを説明します。
[プロトコルの暗号化を設定する] クライアント設定 | [サーバー証明書を信頼する] クライアント設定 | 接続文字列/接続属性 Encrypt/Use Encryption for Data | 接続文字列/接続属性 Trust Server Certificate | 結果 |
---|---|---|---|---|
いいえ | 該当なし | 無効 (既定値) | 無視 | 暗号化は行われません。 |
いいえ | 該当なし | はい | 無効 (既定値) | 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。 |
いいえ | 該当なし | はい | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
はい | いいえ | 無視 | 無視 | 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。 |
はい | はい | 無効 (既定値) | 無視 | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
はい | はい | はい | 無効 (既定値) | 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。 |
はい | はい | はい | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
注意事項
上の表では、さまざまな構成でのシステムの動作についてのみ説明しています。 セキュリティで保護された接続を実現するには、クライアントとサーバーの両方に暗号化が必要であることを確認します。 また、確実にサーバーで検証可能な証明書を用意し、クライアント上の TrustServerCertificate
設定を FALSE
に設定します。
SQL Server Native Client OLE DB プロバイダー
SQL Server Native Client OLE DB プロバイダーは、DBPROPSET_SQLSERVERDBINIT
プロパティ セットに実装されているSSPROP_INIT_TRUST_SERVER_CERTIFICATE
データ ソース初期化プロパティを追加して、検証なしで暗号化をサポートします。 さらに、新しい接続文字列キーワード TrustServerCertificate
が追加されました。
yes
値またはno
値を受け取ります。no
が既定値です。 サービス コンポーネントを使用する場合は、 true
値または false
値を受け取ります。 false
が既定値です。
DBPROPSET_SQLSERVERDBINIT
プロパティ セットの機能強化の詳細については、「初期化プロパティと承認プロパティ (Native Client OLE DB Provider)」を参照してください。
SQL Server Native Client ODBC ドライバー
SQL Server Native Client ODBC ドライバーは、 SQLSetConnectAttr および SQLGetConnectAttr 関数への追加による検証なしでの暗号化をサポートします。
SQL_COPT_SS_TRUST_SERVER_CERTIFICATE
は、 SQL_TRUST_SERVER_CERTIFICATE_YES
または SQL_TRUST_SERVER_CERTIFICATE_NO
を受け入れるために追加されました。 SQL_TRUST_SERVER_CERTIFICATE_NO
が既定値です。 さらに、新しい接続文字列キーワード TrustServerCertificate
が追加されました。
yes
値またはno
値を受け取ります。no
が既定値です。