你目前正处于脱机状态,正在等待 Internet 重新连接

当 SQL Server 服务帐户是域用户时,您会收到"警告 SuperSocket 信息"的警告信息

本文的发布号曾为 CHS303411
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 303411
BUG #: 232774 (SHILOH_BUGS)
症状
当 SQL Server 启动时运行的计算机上Microsoft SQL Server 2000年或 Microsoft SQL Server 2005年时,SQL Server 程序始终尝试注册虚拟服务器在 活动目录(AD) 中。在事件日志中可能会记录下面的事件:

SuperSocket 信息: (SpnRegister): 8344 SuperSocket 信息时出错: (SPNRegister): 错误 1355 SuperSocket 信息: SpnUnRegister(): 错误 8344。

注意错误 1355年相当于 ERROR_NO_SUCH_DOMAIN。错误 8344 等于没有足够的权限来执行注册操作。这显示为SPNRegister函数的警告和错误的SpnUnRegister函数。

此消息不是一条错误消息。此文本只是SQL Server 无法注册服务主体名称 (SPN) 的警告。这表明将使用的安全机制而不是 Microsoft Windows NT Challenge\Response (NTLM) 身份验证Kerberos 身份验证。

这些消息应只考虑问题如果您的 SQL Server 安装要求 Kerberos 身份验证,或者网络的安全设置阻止回退到 NTLM 协商。否则,可以安全地忽略这些消息。
原因
因为,通常会显示消息的 SQL Server 服务以域用户身份运行的帐户没有必需的权限注册 Spn。使用 Microsoft Windows 2000 Service Pack 3 (SP3),您可以启用在服务器群集上的 Kerberos 身份验证。有关说明如何执行此操作,请参阅下面 Microsoft 知识库中相应的文章:
319723 有关 SQL Server 2000 Kerberos 信息支持,包括在服务器群集上的 SQL Server 虚拟服务器
解决方案
您还可以编辑在 活动目录(AD) 目录服务来启用 servicePrincipalName 读取权限的帐户的访问控制设置权限和写入 servicePrincipalName 权限的 SQL 服务帐户。

警告如果使用活动目录服务接口 (ADSI) 编辑管理单元中,LDP 实用工具或任何其他 LDAP 版本 3 客户端,并且不正确地修改了 活动目录(AD) 对象的属性,您可能会导致严重的问题。这些问题可能要求您重新安装 Microsoft Windows 2000 Server、 Microsoft Windows Server 2003,Microsoft Exchange 2000 服务器,Microsoft Exchange Server 2003 中,或 Windows 和 Exchange。Microsoft 不能保证不正确地修改了 活动目录(AD) 对象属性所致的问题都能够解决。修改这些属性需要您自担风险。
替代方法
若要解决这些类型的消息,并使 SQL Server 服务可以为您的 SQL Server 实例动态地创建 Spn,请询问您的域管理员联系以添加适当的权限,SQL Server 启动帐户的用户权限。

若要启用 SQL Server 服务帐户,以在启动时正确建立 Spn,请按照下列步骤操作:
  1. 单击 开始请单击 运行键入 Adsiedit.msc然后单击 确定.
  2. 在中 ADSI 编辑 窗口中,展开 域 [域名称]展开 DC = RootDomainName展开 CN = 用户用鼠标右键单击 CN =帐户名然后单击 属性.

    备注
    • 域名称 表示域的名称。
    • RootDomainName 为根域的名称的占位符。
    • 帐户名 表示指定要启动 SQL Server 服务的帐户。
    • 如果您已指定要启动 SQL Server 服务,本地系统帐户名 表示您用来登录到 Microsoft Windows 帐户。
    • 如果您指定了域用户帐户的 SQL Server 服务, 帐户名 表示域用户帐户。
  3. 在中 CN =帐户名 属性 对话框中,单击 安全 选项卡。
  4. 在上 安全 选项卡上单击 高级.
  5. 在中 高级的安全设置 对话框中,确保在自我用户 权限项目.如果未列出SELF用户,请单击 添加然后添加用户。
  6. 在下 权限项目请单击 自我然后单击 编辑.
  7. 在中 权限项目 对话框中,单击 属性 选项卡。
  8. 在上 属性 选项卡上单击 只是这个对象 在中 应用到 列表中,并确保选择了下列权限下 权限:
    • 读取 servicePrincipalName
    • 编写 servicePrincipalName
  9. 单击 确定 三次,然后关闭 ADSI 编辑 窗口。
有关此过程的帮助,请与 活动目录(AD) 产品支持联系。如果您联系产品支持,请参阅这篇 Microsoft 知识库文章。

当您执行此替代方法时,您无需为新的安装或已修改的 TCP/IP 端口或域名称安装的 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年中修复此问题。

状态
Microsoft 已经确认这是 SQL Server 2000年和 SQL Server 2005 中的一个问题。
参考
详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
235529在基于 Windows 2000 的服务器群集上的 Kerberos 支持
269229 如何手动重新创建群集服务帐户

警告:本文已自动翻译

属性

文章 ID:303411 - 上次审阅时间:04/07/2013 18:39:00 - 修订版本: 1.0

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, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 标准版, Microsoft SQL Server 2000 Workgroup Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition

  • kbbug kbpending kbmt KB303411 KbMtzh
反馈
0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">