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

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

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

以下访问接口初始化字符串关键字支持 OLE DB 应用程序中的 SPN。 在下表中,关键字列中的值用于 IDBInitialize::Initialize 的访问接口字符串。 使用 ADO 或 IDataInitialize::GetDataSource 建立连接时,在初始化字符串中使用说明列中的值。

关键字 DESCRIPTION 价值
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 成员函数进行了说明:

成员函数 DESCRIPTION
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)