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

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

下载 OLE DB 驱动程序

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

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

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

关键字 说明
ServerSPN 服务器 SPN 服务器的 SPN。 默认值为空字符串,这会使 OLE DB Driver for SQL Server 使用提供程序生成的默认 SPN。
FailoverPartnerSPN 故障转移伙伴 SPN 故障转移伙伴的 SPN。 默认值为空字符串,这会使 OLE DB Driver for SQL Server 使用提供程序生成的默认 SPN。

数据源初始化属性

通过 DBPROPSET_SQLSERVERDBINIT 属性集中的以下属性,应用程序可指定或读取 SPN。

名称 类型 使用情况
SSPROP_INIT_SERVERSPN VT_BSTR,读/写 指定服务器的 SPN。 默认值为空字符串,这会使 OLE DB Driver for SQL Server 使用提供程序生成的默认 SPN。
SSPROP_INIT_FAILOVERPARTNERSPN VT_BSTR,读/写 指定故障转移伙伴的 SPN。 默认值为空字符串,这会使 OLE DB Driver for SQL Server 使用提供程序生成的默认 SPN。
SSPROP_INIT_DISCOVEREDSERVERSPN VT_BSTR,只读 用于查询连接的服务器 SPN。 (版本 18.6.3 或更高版本)

{1}数据源属性{2}

DBPROPSET_SQLSERVERDATASOURCEINFO 属性集中的以下属性支持应用程序发现身份验证方法 。

名称 类型 使用情况
SSPROP_INTEGRATEDAUTHENTICATIONMETHOD VT_BSTR,只读 返回用于连接的身份验证方法。 返回到应用程序的值是 Windows 返回到 OLE DB Driver for SQL Server 的那个值。 以下是可能的值:
“NTLM”,使用 NTLM 身份验证打开连接时将返回该值。
“Kerberos”,使用 Kerberos 身份验证打开连接时将返回该值。

如果已经打开连接但无法确定身份验证方法,将返回 VT_EMPTY。

只能在已经初始化数据源时读取此属性。 如果试图在初始化数据源之前读取该属性,IDBProperties::GetProperies 将视情况返回 DB_S_ERRORSOCCURRED 或 DB_E_ERRORSOCCURRED,并且将在 DBPROPSET_PROPERTIESINERROR 中为此属性设置 DBPROPSTATUS_NOTSUPPORTED。 此行为符合 OLE DB 核心规范。
SSPROP_MUTUALLYAUTHENTICATED 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 状态值(如果有)。 未执行任何操作。”

另请参阅

适用于 SQL Server 的 OLE DB 驱动程序编程