用戶端連接中的服務主要名稱 (SPN) (OLE DB)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 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 連接時,描述欄中的值會在初始化字串中使用。
關鍵字 | 描述 | 值 |
---|---|---|
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。 只有當已經初始化資料來源時,才可讀取這個屬性。 如果您嘗試在已初始化資料來源之前讀取這個屬性,IDataInitialize::GetDataSource 將會適當地傳回 DB_S_ERRORSOCCURRED 或 DB_E_ERRORSOCCURRED,而且將會針對這個屬性在 DBPROPSET_PROPERTIESINERROR 中設定 DBPROPSTATUS_NOTSUPPORTED。 這個行為會根據 OLE DB 核心規格。 |
SSPROP_MUTUALLYAUTHENICATED | VT_BOOL,唯讀 | 如果連接中的伺服器已互相驗證過,則會傳回 VARIANT_TRUE,否則會傳回 VARIANT_FALSE。 只有當已經初始化資料來源時,才可讀取這個屬性。 如果嘗試在已初始化資料來源之前讀取這個屬性,IDataInitialize::GetDataSource 將會適當地傳回 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 狀態值 (如果有的話)。 未完成任何工作」。 |