SQL Server xp_regread访问被拒绝

问题描述:

我有一个客户端,正在访问xp_regread(尝试查找数据库路径)的“访问被拒绝”,但我似乎无法重现此操作。我已经尝试运行以下内容SQL Server xp_regread访问被拒绝

REVOKE execute on xp_regread to public 

但它仍然有效。我还发现了一些有关SQL Server 2000问题的文章(http://support.microsoft.com/kb/887165),但客户端服务器是2005年。关于如何解决此问题的任何想法。

编辑:我曾尝试以下

USE MASTER 
GO 

REVOKE execute on xp_regread to public 
GO 

DECLARE @InstanceName nvarchar(128) 
SET @InstanceName = ISNULL(CONVERT(nvarchar(128), SERVERPROPERTY('InstanceName')), N'MSSQLSERVER') 
DECLARE @InstanceKey nvarchar(128) 
EXECUTE master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL\', @InstanceName, @InstanceKey OUTPUT 

print @InstanceName 
print @InstanceKey 

但仍能工作。为了清楚起见,我试图重现一个呼叫不起作用的问题。取消权限是我读过的一种方式,但它仍然适用于我。

+0

问题是什么?你想让用户运行它,还是不想要?我问,因为你有REVOKE – gbn 2011-01-10 14:19:19

+0

我希望它能够运行。用户遇到了“拒绝访问”的问题,我试图找出原因/重现问题。 – Kyle 2011-01-10 14:29:26

这是一个扩展存储过程,需要

EXEC master..xp_regread ... 

然后,这将是

USE master 
GO 
GRANT EXECUTE ON xp_regread TO public 
GO 

如果明确的拒绝已经被设置,那么REVOKE将其删除。这与GRANT不一样。这仅适用于普通用户。

任何对主系统管理员权限或db_owner(SA在主DBO)将绕过权限反正

你应该明确地DENY权限:

GRANT DENY ON xp_regread TO XYuser. 

不过要小心,日后可能会导致问题。就像SSMS中的备份对话框不适用于该人员。

要重现此问题,首先必须对两个不同的错误进行区分:“访问被拒绝”。和“EXECUTE权限被拒绝”。

第一个错误是由于非系统管理员用户的配置问题。第二个原因是缺乏对扩展过程的执行权限。

对于两者请按照帖子How to configure permissions for xp_regread