このトピックでは、クライアント アプリケーションでサービス プリンシパル名 (SPN) をサポートする OLE DB のプロパティとメンバー関数について説明します。 クライアント アプリケーションでの SPN の詳細については、「クライアント接続でのサービス プリンシパル名 (SPN) のサポート」を参照してください。 サンプルについては、「統合 Kerberos 認証 (OLE DB)」を参照してください。
プロバイダー初期化文字列のキーワード
次に示すプロバイダー初期化文字列のキーワードは、OLE DB アプリケーションで SPN をサポートします。 次の表の "キーワード" 列の値は、IDBInitialize::Initialize のプロバイダー文字列に使用されます。 "説明" 列の値は、ADO または IDataInitialize::GetDataSource を使用して接続するときに初期化文字列で使用されます。
| キーワード | 説明 | 価値 |
|---|---|---|
| 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 プロパティ セットの次のプロパティを使用すると、アプリケーションは認証方法を検出できます。
| 名前 | タイプ | 使用方法 |
|---|---|---|
| SSPROP_INTEGRATEDAUTHENTICATIONMETHOD | VT_BSTR、読み取り専用 | 接続に使用された認証方法を返します。 アプリケーションに返される値は、Windows が SQL Server Native Client に返す値です。 指定できる値を次に示します。 - NTLM 認証を使用して接続を開いたときに返される "NTLM"。 - Kerberos 認証を使用して接続を開いたときに返される "Kerberos"。 接続が開いていて認証方法を特定できない場合は、VT_EMPTY が返されます。 このプロパティは、データ ソースが初期化されている場合にのみ読み取ることができます。 データ ソースが初期化される前にプロパティを読み取ろうとすると、IDBProperties::GetProperies は必要に応じてDB_S_ERRORSOCCURREDまたはDB_E_ERRORSOCCURREDを返し、DBPROPSTATUS_NOTSUPPORTEDはこのプロパティのDBPROPSET_PROPERTIESINERRORで設定されます。 この動作は、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 には、新しいキーワード ServerSPN と FailoverPartnerSPNを含めることができます。 |
| 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 の状態の値を確認してください。 作業は終了しませんでした。" |