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
但仍能工作。为了清楚起见,我试图重现一个呼叫不起作用的问题。取消权限是我读过的一种方式,但它仍然适用于我。
答
这是一个扩展存储过程,需要
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权限被拒绝”。
第一个错误是由于非系统管理员用户的配置问题。第二个原因是缺乏对扩展过程的执行权限。
问题是什么?你想让用户运行它,还是不想要?我问,因为你有REVOKE – gbn 2011-01-10 14:19:19
我希望它能够运行。用户遇到了“拒绝访问”的问题,我试图找出原因/重现问题。 – Kyle 2011-01-10 14:29:26