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

本主题说明支持客户端应用程序中的服务主体名称 (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,并且将在 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 包含在初始化字符串中,作为 和 FailoverPartnerSPNServerSPN关键字 (keyword) 值。 如果有默认值,这些关键字将不包括在初始化字符串中。
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)