如何确保在创建到 SQL Server 2005 实例的远程连接时使用 Kerberos 身份验证

文章翻译 文章翻译
文章编号: 909801 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

简介

本文介绍了如何确保在创建到 Microsoft SQL Server 2005 实例的远程连接时,使用 Kerberos 身份验证作为 Microsoft Windows 身份验证方法。

更多信息

如果您使用的是 Windows 集成身份验证而非 SQL 身份验证,SQL Server 2005 会通过 Windows 安全支持提供程序接口 (SSPI) 间接支持 Kerberos 身份验证。但是,当 SQL Server 可以使用 SSPI 来协商要使用的身份验证协议时,在特定情况下 SQL Server 将只使用 Kerberos 身份验证。如果 SQL Server 无法使用 Kerberos 身份验证,Windows 将会使用 NTLM 身份验证。出于安全考虑,我们建议您使用 Kerberos 身份验证,而不要使用 NTLM 身份验证。管理员和用户应当知道如何确保他们是使用 Kerberos 身份验证进行远程连接。

要使用 Kerberos 身份验证,必须确保满足下列所有条件:
  • 服务器和客户端计算机都必须是同一 Windows 域的成员或可信任域的成员。
  • 服务器的服务主体名称 (SPN) 必须在 Active Directory 目录服务中进行注册。
  • SQL Server 2005 实例必须启用 TCP/IP 协议。
  • 客户端必须使用 TCP/IP 协议连接到 SQL Server 2005 实例。例如,您可以将 TCP/IP 协议放在客户端协议顺序的最前面。或者,您可以在连接字符串中添加前缀“tcp:”,以指定连接将使用 TCP/IP 协议。

如何在域中注册 SPN

为 SQL Server 服务注册一个 SPN,其本质就是在 SPN 与启动了服务器实例服务的 Windows 帐户之间创建一个映射。

必须注册该 SPN,原因是客户端必须使用经过注册的 SPN 才能连接服务器实例。SPN 是由服务器的计算机名和 TCP/IP 端口构成的。如果不注册 SPN,SSPI 将无法确定与 SPN 关联的帐户。因此,将不会使用 Kerberos 身份验证。

当 SQL Server 在本地系统帐户或域管理员帐户下运行时,实例将在启动时自动以下面的格式注册 SPN:
MSSQLSvc/FQDN:tcpport
注意FQDN 是服务器的完全限定域名。tcpport 是 TCP/IP 端口号。

由于 TCP 端口号包括在 SPN 中,因此 SQL Server 必须启用 TCP/IP 协议,以便用户能够使用 Kerberos 身份验证进行连接。同样的规则也适用于群集配置。此外,如果实例在启动时自动注册了一个 SPN,则该 SPN 将在实例停止时自动注销。

只有域管理员帐户或本地系统帐户才具有注册 SPN 所必需的权限。因此,如果 SQL Server 服务是在非管理员帐户下启动的,则 SQL Server 无法为实例注册该 SPN。这一行为不会阻止实例启动。但是,Windows 事件日志的应用程序日志中会记录以下消息:

类型: 信息
来源: MSSQL$InstanceName
类别: (2)
事件 ID: 26037
日期: Date
时间: Time
用户: N/A
计算机: ComputerName
描述:
SQL 网络接口库无法为 SQL Server 服务注册服务主体名称(SPN)。错误:0x54b。注册 SPN 失败会导致集成身份验证仍使用 NTLM,而不是 Kerberos。这只是一条信息性消息。仅当身份验证策略要求使用 Kerberos 身份验证时才需要执行进一步的操作。
有关更多信息,请参阅在 http://support.microsoft.com 的帮助和支持中心。

如果记录了此消息,则您必须在域管理员帐户下为该实例手动注册 SPN,然后才能使用 Kerberos 身份验证。要注册该 SPN,您可以使用 Microsoft Windows 2000 Server Resource Kit 中包含的 SetSPN.exe 工具。Microsoft Windows Server 2003 支持工具中也包括此工具。Windows Server 2003 支持工具包括在 Microsoft Windows Server 2003 Service Pack 1 (SP1) 中。

有关如何获取 Windows Server 2003 Service Pack 1 支持工具的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
892777 Windows Server 2003 Service Pack 1 支持工具
可以使用类似以下形式的命令来为实例注册 SPN:
SetSPN –A MSSQLSvc/<ComputerName>.<DomainName>:1433 <AccountName>
注意:如果已经存在一个 SPN,则必须先删除该 SPN,然后再重新注册它。如果帐户映射已改变,则需要这样做。要删除一个现有的 SPN,您可以将 SetSPN.exe 工具与 -D 开关一起使用。

如何确保您使用的是 Kerberos 身份验证

连接到一个 SQL Server 2005 实例后,在 SQL Server Management Studio 中运行以下 Transact-SQL 语句:
select auth_scheme from sys.dm_exec_connections where session_id=@@spid
如果 SQL Server 使用的是 Kerberos 身份验证,则结果窗口的 auth_scheme 列中会出现“KERBEROS”的字符串。

参考

有关更多信息,请参见 Microsoft SQL Server 2005 联机丛书中的以下主题:
  • 服务主体名称注册
  • 如何在服务器群集上启用包括 SQL Server 虚拟服务器的 Kerberos 身份验证

属性

文章编号: 909801 - 最后修改: 2006年9月22日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Express Edition
关键字:?
kbinfo kbsql2005connect KB909801
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com