客户端连接中的服务主体名称 (SPN) (OLE DB)

本主题说明支持客户端应用程序中的服务主体名称 (SPN) 的 OLE DB 属性和成员函数。有关客户端应用程序中的 SPN 的详细信息,请参阅客户端连接中的服务主体名称 (SPN) 支持

访问接口初始化字符串关键字

以下访问接口初始化字符串关键字支持 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,并且将在 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 可以包含新关键字 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 状态值(如果有)。未执行任何操作。”