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

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

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除 SQL Server Native Client(通常缩写为 SNAC)。 不建议在新的开发工作中使用 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。

{1}数据源属性{2}

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 状态值(如果有)。 未执行任何操作。”

另请参阅

SQL Server Native Client (OLE DB)