クライアント接続でのサービス プリンシパル名 (SPN) (OLE DB)

適用対象: SQL Server Azure SQL Database 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 (SSMS) から削除されました。 SQL Server Native Client OLE DB プロバイダー (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) はどちらも、新しい開発には推奨されません。 今後は、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server に切り替えてください。

このトピックでは、クライアント アプリケーションでサービス プリンシパル名 (SPN) をサポートする OLE DB のプロパティとメンバー関数について説明します。 クライアント アプリケーションでの SPN の詳細については、「クライアント接続でのサービス プリンシパル名 (SPN) のサポート」を参照してください。 サンプルについては、「統合 Kerberos 認証 (OLE DB)」を参照してください。

プロバイダー初期化文字列のキーワード

次に示すプロバイダー初期化文字列のキーワードは、OLE DB アプリケーションで SPN をサポートします。 次の表の "キーワード" 列の値は、IDBInitialize::Initialize のプロバイダー文字列に使用されます。 "説明" 列の値は、ADO または IDataInitialize::GetDataSource を使用して接続するときに初期化文字列で使用されます。

Keyword 説明
ServerSPN サーバー SPN サーバーの SPN。 既定値は空の文字列です。これにより、SQL Server Native Client はプロバイダーによって生成された既定の SPN を使用します。
FailoverPartnerSPN フェールオーバー パートナー SPN フェールオーバー パートナーの SPN。 既定値は空の文字列です。これにより、SQL Server Native Client はプロバイダーによって生成された既定の SPN を使用します。

データ ソース初期化プロパティ

DBPROPSET_SQLSERVERDBINIT プロパティ セット内の次のプロパティは、アプリケーションによる SPN の指定を可能にします。

名前 種類 使用法
SSPROP_INIT_SERVERSPN VT_BSTR、読み取り/書き込み サーバーの SPN を指定します。 既定値は空の文字列です。これにより、SQL Server Native Client はプロバイダーによって生成された既定の SPN を使用します。
SSPROP_INIT_FAILOVERPARTNERSPN VT_BSTR、読み取り/書き込み フェールオーバー パートナーの SPN を指定します。 既定値は空の文字列です。これにより、SQL Server Native Client はプロバイダーによって生成された既定の SPN を使用します。

データ ソースのプロパティ

DBPROPSET_SQLSERVERDATASOURCEINFO プロパティ セット内の次のプロパティは、アプリケーションによる認証方法の検出を可能にします。

Name 種類 使用法
SSPROP_INTEGRATEDAUTHENTICATIONMETHOD VT_BSTR、読み取り専用 接続に使用された認証方法を返します。 アプリケーションに返される値は、Windows が SQL Server Native Client に返す値です。 指定できる値を次に示します。
"NTLM"。これは NTLM 認証を使用して接続を開いたときに返されます。
"Kerberos"。これは Kerberos 認証を使用して接続を開いたときに返されます。

接続が開いていて認証方法を特定できない場合は、VT_EMPTY が返されます。

このプロパティは、データ ソースが初期化されている場合にのみ読み取ることができます。 データ ソースが初期化される前にこのプロパティを読み取ろうとすると、IDBProperties::GetProperies から DB_S_ERRORSOCCURRED または DB_E_ERRORSOCCURRED が返され、必要に応じて、このプロパティの DBPROPSET_PROPERTIESINERROR に DBPROPSTATUS_NOTSUPPORTED が設定されます。 この動作は、OLE DB のコア仕様に従っています。
SSPROP_MUTUALLYAUTHENICATED VT_BOOL、読み取り専用 接続されているサーバーが相互に認証されている場合は VARIANT_TRUE を返し、それ以外の場合は VARIANT_FALSE を返します。

このプロパティは、データ ソースが初期化されている場合にのみ読み取ることができます。 データ ソースが初期化される前にこのプロパティを読み取ろうとすると、IDBProperties::GetProperies から DB_S_ERRORSOCCURRED または DB_E_ERRORSOCCURRED が返され、必要に応じて、このプロパティの DBPROPSET_PROPERTIESINERROR に DBPROPSTATUS_NOTSUPPORTED が設定されます。 この動作は、OLE DB のコア仕様に従っています。

Windows 認証を使用していない接続に対してこの属性が照会されると、VARIANT_FALSE が返されます。

OLE DB API による SPN のサポート

次の表では、クライアント接続で SPN をサポートする OLE DB メンバー関数について説明します。

メンバー関数 説明
IDataInitialize::GetDataSource pwszInitializationString には、新しいキーワードである ServerSPNFailoverPartnerSPN を含めることができます。
IDataInitialize::GetInitializationString SSPROP_INIT_SERVERSPN および SSPROP_INIT_FAILOVERPARTNERSPN の値が既定値以外の場合は、それらの値が ppwszInitString を介して ServerSPN および FailoverPartnerSPN のキーワード値として初期化文字列に取り込まれます。 それ以外の場合、これらのキーワードは初期化文字列に取り込まれません。
IDBInitialize::Initialize データ ソース初期化プロパティに DBPROP_INIT_PROMPT を設定して入力要求を有効にすると、OLE DB の [ログイン] ダイアログ ボックスが表示されます。 これにより、プリンシパル サーバーとそのフェールオーバー パートナーの両方に対して SPN を入力できます。

DPPROP_INIT_PROVIDERSTRING にプロバイダー文字列が設定されている場合、その文字列は新しいキーワード ServerSPN および FailoverPartnerSPN を認識し、キーワードに値が指定されていれば、その値を使用して SSPROP_INIT_SERVER_SPN および SSPROP_INIT_FAILOVER_PARTNER_SPN を初期化します。

IDBInitialize::Initialize を呼び出す前に IDBProperties::SetProperties を呼び出して、プロパティ SSPROP_INIT_SERVER_SPN および SSPROP_INIT_FAILOVER_PARTNER_SPN を設定することができます。 この方法は、プロバイダー文字列を使用する代わりに使用できます。

プロパティが複数の場所で設定されている場合は、プログラムによって設定された値が、プロバイダー文字列に設定された値より優先されます。 初期化文字列に設定された値は、ログイン ダイアログ ボックスで設定された値より優先されます。

プロバイダー文字列に同じキーワードが複数回使用されている場合は、最初に使用された値が優先されます。
IDBProperties::GetProperties IDBProperties::GetProperties を呼び出すことで、新しいデータ ソース初期化プロパティ SSPROP_INIT_SERVERSPN と SSPROP_INIT_FAILOVERPARTNERSPN の値、および新しいデータ ソース プロパティ SSPROP_AUTHENTICATIONMETHOD と SSPROP_MUTUALLYAUTHENTICATED の値を取得できます。
IDBProperties::GetPropertyInfo IdbProperties::GetPropertyInfo には、新しいデータ ソース初期化プロパティ SSPROP_INIT_SERVERSPN と SSPROP_INIT_FAILOVERPARTNERSPN、または新しいデータ ソース プロパティ SSPROP_AUTHENTICATION_METHOD と SSPROP_MUTUALLYAUTHENTICATED が含められます。
IDBProperties::SetProperties IDBProperties::SetProperties を呼び出すことで、新しいデータ ソース初期化プロパティ SSPROP_INITSERVERSPN と SSPROP_INIT_FAILOVERPARTNERSPN の値を設定できます。

これらのプロパティはいつでも設定できますが、データ ソースが既に開いている場合は、次のエラーが返されます。DB_E_ERRORSOCCURRED、"複数ステップの OLE DB の操作でエラーが発生しました。 各 OLE DB の状態の値を確認してください。 作業は終了しませんでした。"

参照

SQL Server Native Client (OLE DB)