重要:本文包含有关如何修改注册表的信息。请确保备份注册表之前对其进行修改。请确保您知道如何出现问题时还原注册表。有关如何备份、 还原和修改注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

Microsoft Windows 注册表256986说明

症状

基于 Microsoft SQL Server 2000年的计算机升级到 Microsoft SQL Server 2000 Service Pack 4 (SP4) 后,调用注册表扩展存储的过程的 SQL Server 查询可能会失败,并且您会收到以下错误消息:

访问被拒绝。

使用注册表扩展存储的过程在以下列表中的任何一个时,您收到的错误消息:

  • xp_regread

  • xp_instance_regread

  • xp_regenumkeys

  • xp_instance_regenumkeys

  • xp_regenumvalues

  • xp_instance_regenumvalues

  • xp_regwrite

  • xp_instance_regwrite

  • xp_regaddmultistring

  • xp_instance_regaddmultistring

  • xp_regremovemultistring

  • xp_instance_regremovemultistring

  • xp_regdeletevalue

  • xp_instance_regdeletevalue

  • xp_regdeletekey

  • xp_instance_regdeletekey

原因

出现此问题的原因是 SQL Server 2000 SP4 实现限制上哪些注册表路径注册表扩展存储的过程可以访问。当查询调用扩展存储的过程的注册表时,注册表扩展存储的过程检查对照注册表配置单元的控件列表的请求的注册表子项。如果查询请求的注册表子项不在控件列表中,您将收到以下错误消息:

访问被拒绝。

此错误消息的哪种这两个注册表调用扩展存储的过程的上下文中的 SQL Server 用户帐户的权限无关。即使用户具有管理员权限,也会出现错误消息。


注意:当您收到的错误消息时,注册表扩展存储的过程返回的结果。

解决方案

警告如果使用注册表编辑器或其他方法错误地修改了注册表,可能会出现严重问题。这些问题可能需要您重新安装操作系统。Microsoft 不能保证这些问题能够得到解决。修改注册表的风险由您自己承担。

警告注册表扩展存储的过程未记录也可能会发生变化。因此,我们不建议您在客户端代码中调用这些过程。可能不支持这些过程的未来实现。此外,还有过去的实现将继续支持在更高版本的 SQL Server 不能保证。

要解决此问题,请修改注册表项来控制访问注册表扩展存储过程。控制列表位于MSSQLServer子项下的注册表中。对于 SQL Server 2000年的默认实例,请在注册表中找到下面的子项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\ExtendedProcedures注意:SQL Server 2000 SP4 应用于群集 SQL Server 的实例时,不创建此注册表项。

对于 SQL Server 2000年命名实例,请在注册表中找到下面的子项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL 实例 < 名称 > Server\ \MSSQLServer\ExtendedProcedure

注意:实例名称是 SQL Server 2000 命名实例的名称。在ExtendedProcedure子项中,有两个 REG_MULTI_SZ 注册表项:

  • Xp_regread 允许的路径

  • Xp_regwrite_Allowed 的路径

Xp_regread 允许路径条目包含以下列表的只读的注册表扩展存储的过程允许的注册表值:

  • xp_regread

  • xp_instance_regread

  • xp_regenumkeys

  • xp_instance_regenumkeys

  • xp_regenumvalues

  • xp_instance_regenumvalues

Xp_regwrite 允许路径条目包含下面列出的允许的注册表值写入注册表扩展存储过程:

  • xp_regwrite

  • xp_instance_regwrite

  • xp_regaddmultistring

  • xp_instance_regaddmultistring

  • xp_regremovemultistring

  • xp_instance_regremovemultistring

  • xp_regdeletevalue

  • xp_instance_regdeletevalue

  • xp_regdeletekey

  • xp_instance_regdeletekey

若要允许访问所需的注册表子项,可以删除Xp_regread 允许路径条目或Xp_regwrite_Allowed 路径条目中,或删除这两个项目。此外,您可以修改在Xp_regread 允许路径条目或Xp_regwrite_Allowed 路径条目和添加扩展存储的过程所需的查询访问的值。如果您删除Xp_regread 允许路径条目和Xp_regwrite 允许路径条目,则会禁用注册表值的限制。因此,注册表扩展存储的过程的行为恢复为以前的 SQL Server 2000 SP4 行为。要实现相同的结果,则可删除ExtendedProcedures注册表项。我们建议您扩展每个列表有效的注册表值,而不是禁用 SQL Server 2000 SP4 实现的限制。

Xp_regread 允许的路径

以下是Xp_regread 允许路径条目示例。

注意:实例的 SQL Server 实例的实际名称替换。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ < 实例 >

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\80

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQLServer


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 消息传递子系统

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\MSSQLServer


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SQLCTRS

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SQLServer


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQL$<INSTANCE>


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLServer


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Services\SQLAgent$<INSTANCE>

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation


HKEY_CURRENT_USER\Software\Microsoft\Mail HKEY_CURRENT_USER\Control Panel\International

Xp_regwrite 允许的路径

以下是Xp_regwrite 允许路径条目示例。

注意:实例的 SQL Server 实例的实际名称替换。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ < 实例 >

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Services\SQLAgent$<INSTANCE>

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\80\Replication

详细信息

SQL Server 2000 Service Pack 4 安装时,安装程序将预先填充Xp_regread 允许路径注册表项和Xp_regwrite 允许路径注册表项使用扩展存储过程,SQL Server 2000可以访问。

有关 SQL Server 2000 service pack 的详细信息,请访问下面的 Microsoft 网站:

http://technet.microsoft.com/en-us/sqlserver/bb331754.aspx

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?

谢谢您的反馈!

×