如何在 SQL Server 中使用 Kerberos 身份验证

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

本文内容

概要

您可以与 Microsoft SQL 使用 Kerberos 身份验证服务器 2000。SQL Server 2000年支持此功能作为一个典型的一部分Microsoft Windows 2000 或Microsoft Windows 服务器 2003 活动目录(AD) 域安装。使用 Microsoft Windows 2000 Service Pack 3 (SP3)Windows Server 2003 中,您可以启用在服务器群集上的 Kerberos 身份验证。

有关这项附加的详细信息功能,请单击下面的文章编号,以查看在文章Microsoft 知识库文章:
235529在基于 Windows 2000 的服务器群集上的 Kerberos 支持

注意如果您运行的 Windows,仅可以使用此功能2000 SP3或 Windows 服务器 2003年。

SQL Server 2000故障转移群集还可以使用此功能。当网络名称在基于 Windows 2000 的群集中,则 SQL Server 所依赖的资源升级后,可以对资源使用 Kerberos 身份验证到 Windows 2000 SP3 的计算机或 Windows 服务器 2003年。若要安装 SQL Server。故障转移群集,您必须具有 Microsoft SQL Server 2000年企业版或者安装开发人员版。

注意概念和本文中的讨论适用于 SQL Server 2000年还适用于 SQL Server 2005。有关 SQL Server 2005 中此主题的详细信息,请参阅 SQL Server 2005 联机丛书中的下列主题:
  • 如何: 启用 Kerberos 身份验证包括在服务器群集上的 SQL Server 虚拟服务器
  • 服务主体名称注册
有关如何确保 SQL Server 2005 中使用 Kerberos 身份验证的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
909801如何确保当您创建远程连接到的 SQL Server 2005 实例时,将使用 Kerberos 身份验证

更多信息

SQL Server 可以使用 Kerberos 身份验证服务器群集。您可以使用与独立计算机的 Kerberos 身份验证,正在运行 SQL Server 或使用在运行的 SQL Server 实例虚拟服务器。

连接到正在运行 Microsoft 的服务器Internet Information Services,并与 SQL 的 Kerberos 连接服务器 2000

本部分介绍如何连接到正在运行的服务器Microsoft Internet Information Services (IIS) 连接到 Kerberos正在运行 SQL Server 的服务器。

注意
执行安装过程之前,请下载 Kerbtray 并SetSPN 实用程序。

若要下载的 Kerbtray 实用程序,请访问下面的 Microsoft Web 站点: 与 Kerbtray.exe,您可以轻松地验证或删除 (或两者)任何相关联的计算机正在使用中的 Kerberos 票证。

若要下载 SetSPN 实用程序,请访问下面的 Microsoft Web站点:
http://www.microsoft.com/downloads/details.aspx?FamilyID=5fd831fd-ab77-46a3-9cfe-ff01d29e5c46&displaylang=en


下面的过程提供一个安装程序的一个示例其中,您使用 Kerberos 身份验证通过 IIS 页来访问的序列正在运行 SQL Server 的服务器。

步骤 1: 配置域控制器

在 活动目录(AD) 用户和计算机中的域控制器:
  1. 右键单击您想要设置的计算机委派 (IIS 服务服务器),然后单击以选中 信任此计算机作为委派.如果正在运行 SQL Server 的计算机似乎是最后一次联系的计算机,但该计算机具有链接服务器,它还必须授予委派权限。如果不是最后一次是中介机构的所有计算机都必须都是链中的计算机,受信任以进行委派。
  2. 授予委派权限的 SQL Server 服务帐户域用户帐户。对于群集,必须具有一个域用户帐户(此步骤不是必需的计算机为 SQL Server 安装运行 SQL Server 所使用的是本地系统帐户):
    1. 在中 用户 文件夹中,用鼠标右键单击用户帐户,然后单击 属性.
    2. 在用户帐户的属性对话框中,单击 帐户 选项卡。
    3. 在下 帐户选项单击以选中" 信任帐户可用于委派 复选框。请确保中的 敏感帐户,不能被委派 检查为此帐户清除框。

      注意仅要到如在双跃点方案中分布式查询 (链接的服务器查询) 使用 Windows 身份验证,如远程 SQL 服务器从目标 SQL 服务器委派凭据时,SQL Server 服务帐户需要帐户被信任以便用于委任的权限。
    注意这些步骤仅适用于 Windows 2000 服务器。如果您使用的 Windows Server 2003,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点:
    http://technet2.microsoft.com/windowsserver/en/library/bef202b0-c8e9-4999-9af7-f56b991a4fd41033.mspx
  3. 使用 Kerbtray.exe 实用程序来验证该 Kerberos从域控制器和主机接收到票证:
    1. 用鼠标右键单击通知中的 Kerbtray 图标区域,然后单击清除票证
    2. 等待绿色的 Kerbtray 图标,以更改从绿色为黄色。一旦出现这种情况,打开一个命令提示窗口并运行命令:
      net 会话 * /d
      这将删除现有的会话,并强制到新会话建立和接收到的 Kerberos 票证。

步骤 2: 配置 IIS 服务的服务器

  1. 默认 Web 站点 Wwwroot 文件替换示例.asp 文件。若要创建示例.asp 文件,请使用中提供的代码"ASP 测试脚本的 SQL Server 数据检索"一节。
  2. 将该文件添加到 Wwwroot 文件夹。若要执行此操作,请使用在"ASP 测试脚本的 SQL Server 数据检索"部分中的示例代码。将文件保存为 Default.asp。
  3. 重新配置 Web 服务器以使用集成的 Windows仅身份验证:
    1. 用鼠标右键单击默认的 Web 服务器,然后单击安全文件夹。
    2. 在安全性文件夹中进行适当的更改,并然后单击以清除 匿名访问.
    3. 从命令提示符处,运行以下命令:
      获取 cscript C:\Inetpub\Adminscripts\adsutil.vbsw3svc/NTAuthenticationProviders
      如果启用了协商,则会返回如下:
       NTAuthenticationProviders : (STRING) Negotiate,NTLM
      有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
      215383如何配置 IIS 以便支持 Kerberos 协议和 NTLM 协议的网络身份验证
    备注
    • 您必须在安装 Microsoft 数据访问权限 (MDAC) 2.6,或更高版本,IIS 服务的服务器。若要执行此操作 (并使该工具可用于测试),安装到 Web 服务器的 SQL Server 2000年客户端工具。到安装仅是 MDAC 2.6 或更高版本 (不安装客户端工具),请访问下面的 Microsoft Web 站点:
      http://msdn2.microsoft.com/en-us/data/aa937730.aspx
    • IIS 是一个常见的中间层系统。但是,IIS 不只中间层系统。如果 IIS 不在您的环境中的中间层系统,请按照您的中间层系统的相应步骤操作。
  4. 请验证
    HKLM\SW\MS\MSSQLSERVER\Client\DSQUERY
    值会出现在注册表中。如果未显示的值,将其作为添加
    DSQUERY:Reg_SZ:DBNETLIB
    .
  5. 使用 Kerbtray.exe 实用程序来验证该 Kerberos从域控制器和主机接收到票证:
    1. 用鼠标右键单击通知区域中的 Kerbtray 图标然后单击清除票证
    2. 等待绿色的 Kerbtray 图标,以更改从绿色为黄色。一旦出现这种情况,打开一个命令提示窗口并运行命令:
      net 会话 * /d
      这将删除现有的会话,并强制到新会话建立和接收到的 Kerberos 票证。

步骤 3: 配置 SQL Server 服务,以便动态地创建 Spn

若要执行此操作,您必须授予以下的访问控制设置为在 活动目录(AD) 目录服务中的 SQL Server 服务帐户:
  • 读取 servicePrincipalName
  • 编写 servicePrincipalName
警告
  • 如果您使用活动目录服务接口 (ADSI) 编辑单元的 LDP 实用工具中,或 LDAP 3 客户端,并且不正确地修改了 活动目录(AD) 对象的属性,则会出现严重问题。若要解决这些问题,您可能需要重新安装 Microsoft Exchange 2000 Server 或 Microsoft Exchange Server 2003年。在某些情况下,您可能需要重新安装 Microsoft Windows 2000 Server 或 Microsoft Windows Server 2003,然后重新安装 Exchange 2000 Server 或 Exchange Server 2003年。我们不能保证可以解决这些问题。修改这些属性需要您自担风险。
  • 您必须以域管理员身份登录。或者,您必须要求您的域管理员授予适当的权限和对 SQL Server 启动帐户的适当的用户权限。
若要配置 SQL Server 服务,若要在 SQL 服务器服务启动时动态创建 Spn,请执行以下步骤:
  1. 单击 开始请单击 运行键入 Adsiedit.msc然后单击 确定.

    注意在 Windows 支持工具包含 adsi 编辑工具。若要获取 Windows 支持工具,请访问下面的 Microsoft Web 站点:
    http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en
  2. 在 ADSI Edit 管理单元中,展开 域 [域名称]展开 DC = RootDomainName展开 CN = 用户用鼠标右键单击 CN = 帐户名 然后单击 属性.

    备注
    • 域名称 是一个占位符的名称。
    • RootDomainName 为根域的名称的占位符。
    • 帐户名 是一个占位符,用于指定要启动 SQL Server 服务的帐户。
    • 如果您指定要启动 SQL Server 服务,在本地系统帐户 帐户名 是一个占位符,您用来登录到 Microsoft Windows 帐户。
    • 如果您指定一个域用户帐户,若要启动 SQL Server 服务, 帐户名 是一个占位符的域用户帐户。
  3. 在中 CN = 帐户名 属性 对话框中,单击 安全 选项卡。
  4. 在上 安全 选项卡上单击 高级.
  5. 在中 高级的安全设置 对话框中,请确保 自我 列在下 权限项目.

    如果 自我 是未列出,请单击 添加然后添加 自我.
  6. 在下 权限项目请单击 自我然后单击 编辑.
  7. 在中 权限项目 对话框中,单击 属性 选项卡。
  8. 在上 属性 选项卡上单击 只是这个对象 在中 应用到 列表,然后单击以选中的复选框,在下的下列权限 权限:
    • 读取 servicePrincipalName
    • 编写 servicePrincipalName
  9. 单击 确定 两次。

    注意有关此过程的帮助,Active Directory 的产品支持,请与联系,并提到这篇 Microsoft 知识库文章。

    注意若要使用 dsacls 工具来确定自我帐户是否有写入 ServicePrincipalName 权限,请使用dsacls命令。语法为:
    dsacls <distinguished_Name_of_service_account>
    如果自我帐户具有写入 ServicePrincipalName 权限,您将看到以下输出:
    Allow NT Authority\SELF SPECIAL ACCESS for Validated Write to Service principal name
    WRITE PROPERTY
    Dsacls 工具是支持工具的一部分。
  10. 在中 CN = 帐户名 属性 对话框中,单击 属性编辑器.
  11. 在下 属性请单击 servicePrincipalName 在中 属性 列中,然后再单击 编辑.
  12. 在中 多值字符串编辑器 对话框框中,删除的 SQL Server 实例,使用此 SQL Server 服务帐户的服务主体名称 (Spn)。

    警告只应删除的 SQL Server 实例,您当前正在处理的 Spn。SQL Server 使用此服务帐户的其他实例将能够删除这些实例与在下次您启动这些实例相关的 Spn。
  13. ADSI Edit 管理单元的退出。
完成以上步骤后,如果更改 TCP/IP 端口或为新安装的 SQL Server 2005 或现有实例的 SQL Server 2005 的域名还消除 SPN 问题。

重要我们建议您不要不要授予 WriteServicePrincipalName 右到 SQL 服务帐户满足以下条件时:
  • 有多个域控制器。
  • SQL Server 被聚集索引。
在此方案中,可能由于在 活动目录(AD) 复制滞后时间删除 SQL Server 的 SPN。这可能会导致 SQL Server 实例的连接问题。

假定您有以下:
  • 名为 Sqlcluster,有两个节点的 SQL 虚拟实例: 节点 A 和节点 b。
  • 由域控制器的验证是节点 A 和节点 B 进行身份验证的域控制器 b。


下面可能会出现:
  1. Sqlcluster 实例节点 A 上的活动,并在启动过程中的在域控制器中的 SQL SPN 注册了...
  2. Sqlcluster 实例时,故障转移到节点 B 节点 A 通常是关机。
  3. Sqlcluster 实例取消其来自域控制器的 SPN 注册在关机过程中,节点 a。
  4. 从域控制器的移除该 SPN,但更改已不被复制到域控制器 b。
  5. 当启动在节点 B 上,尝试向 SQL SPN 注册域控制器 B.Sqlcluster 实例因为,SPN 仍然存在节点 B 没有注册 SPN。
  6. 经过一些时间后,域控制器的复制 活动目录(AD) 复制的一部分 (从第 3 步) 到域控制器 B 的 SPN 的删除操作。最终结果是没有有效的 SPN 存在域中该 SQL 实例,因此您看到的 Sqlcluster 实例的连接问题。

注意SQL Server 2012年中修复此问题。


步骤 4: 配置客户端计算机

  1. 对于每个要连接的客户端,请验证该 MicrosoftInternet Explorer 被配置为使用 Windows 身份验证:
    1. 在 Internet Explorer 中上 工具菜单上,单击 Internet 选项.
    2. 单击 高级 选项卡。
    3. 在下 安全单击以选中 启用集成 Windows 身份验证 (需要重新启动),然后单击 确定.

步骤 5: 测试配置

所涉及的每台计算机:
  1. 登录到计算机上,然后使用 Kerbtray.exe 验证计算机可以从域获取有效的 Kerberos 票证控制器。
  2. 使用 Kerbtray.exe 删除所有票据上计算机。
  3. 创建和连接到返回 SQL Web 页服务器的数据。

    注意替换 SQLSERVERNAME 名称正在运行 SQL Server 的计算机:
    • 如果返回的数据时,此页将显示身份验证类型协商,以及结果的sp_helpdb的 SQL Server 数据存储过程应返回的数据库的列表上服务器正在通过。ASP 页。
    • 如果必须打开审核在 SQL Server 中应用程序日志,您会看到该连接是"受信任"。

对于 SQL Server 数据检索 ASP 测试脚本

下面是用于 SQL Server 数据的 ASP 测试脚本。如果您使用此代码示例,请确保您将替换 SQLSERVERNAME 这就是计算机的名称在运行 SQL Server。
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%="'auth_user' is" & request.servervariables("auth_user")%>
<P>
<%="'auth_type' is" & request.servervariables("auth_type")%>
<P>
Connections string is " Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME 
<P>
<%
	set rs = Server.CreateObject("ADODB.Recordset")
	set cn = Server.CreateObject("ADODB.Connection")
	cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"
	rs.open "MASTER..sp_helpdb",cn
	Response.Write cstr(rs.Fields.Count) +"<BR>"
	while not rs.EOF
		Response.Write cstr(rs(0))+"<BR>"
		rs.MoveNext
	wend
	rs.Close
	cn.Close
	set rs = nothing ' Frees memory reserved by the recordset.
	set cn = nothing ' Frees memory reserved by the connection.
%>
</BODY>
</HTML>
					

如何收集的 活动目录(AD) 服务器原则的列表名称信息

若要收集的 活动目录(AD) 服务器的主体名称 (SPN) 列表信息,在一个您的域控制器上键入以下命令在哪里 betaland NetBIOS 域名称和 NewoutputUsers.txt 是输出文件的名称您将使用端口结果。如果您不使用完整路径,该文件在当前文件夹中运行命令行的位置放置。此示例命令查询整个域:
ldifde-d"CN = 用户,DC =betaland"-l servicePrincipalName-F NewoutputUsers.txt
此语法创建名为 NewoutputUsers.txt 的文件其中包含类似于"域级别中输出的信息在这篇文章中的 NewouputUsers.txt 的输出"部分。

此输出可能如果您收集整个域,则会异常庞杂。因此,为限制收集的信息,为特定的用户名称,请使用以下语法,其中 用户名称 为用户名和 betaland 为您要查询的域:
ldifde-d"CN =用户名称特区 =betaland"-l servicePrincipalName-F NewoutputUsers.txt
为特定的用户,极大地减少了收集的信息您必须通过搜索的数据。如果您收集整个的信息域,搜索特定的用户问题的服务器的名称。在中输出示例中,您将看到:
  • 服务器不再存在,但它没有项从活动目录中完全删除。
  • 用户"用户名称"有有效SPN 十个不同的服务器有关的信息。
此外,您可以使用活动目录服务接口 (ADSI) 工具来更正无效的活动目录项。

警告如果您使用 ADSI Edit 管理单元中,LDP 实用工具,或任何其他LDAP 版本 3 客户端,并且您不正确地修改活动的属性目录对象时,可能会导致严重的问题。这些问题可能需要您可以重新安装 Microsoft Windows 2000 服务器,Microsoft Windows Server 2003 中,Microsoft Exchange 2000 服务器,Microsoft Exchange Server 2003 中或这两个窗口和交换。Microsoft 不能保证,如果发生的问题您不正确地修改对象属性,可以解决活动目录。修改这些属性由您自己承担。

域级别的输出的 NewouputUsers.txt

	dn: CN=User Name,CN=Users,DC=betaland
	changetype: add
	servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257
	servicePrincipalName: MSSQLSvc/INST3.betaland:3616
	servicePrincipalName: MSSQLSvc/INST2.betaland:3490
	servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433
	servicePrincipalName: MSSQLSvc/VSS1.betaland:1433
	servicePrincipalName: MSSQLSvc/INST1.betaland:2536
	servicePrincipalName: MSSQLSvc/INST4.betaland:3967
	servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434
	servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433
	servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

参考

有关安全帐户委派的详细信息,请参阅SQL Server 联机丛书中的"安全帐户委派"主题。

有关详细信息,请单击下面的文章编号,若要查看 Microsoft 知识库中相应的文章:
262177如何启用 Kerberos 事件日志记录
321708 如何在 Windows 2000 中使用网络诊断工具 (Netdiag.exe)
326985 如何在 IIS 中对 Kerberos 相关的问题进行疑难解答
244474 如何强制 Kerberos 使用 TCP,而不是 Windows Server 2003 中,在 Windows XP 中,并在 Windows 2000 中的 UDP

属性

文章编号: 319723 - 最后修改: 2013年4月7日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 标准版?当用于
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
关键字:?
kbinfo kbmt KB319723 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 319723
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