SQL Server xp_regread访问被拒绝

时间:2011-01-10 14:09:43

标签: 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

但它仍然有效。要清楚,我正在尝试重现呼叫不起作用的问题。撤销权限是我应该阅读的一种方式,但它仍适用于我。

3 个答案:

答案 0 :(得分:2)

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

EXEC master..xp_regread ...

然后,它将是

USE master
GO
GRANT EXECUTE ON xp_regread TO public
GO

如果已设置显式DENY,则REVOKE将删除它。这与GRANT不同。这仅适用于普通用户。

拥有sysadmin权限或master中的db_owner(sa是master中的dbo)的任何人都将绕过权限

答案 1 :(得分:1)

您应该明确DENY权限:

GRANT DENY ON xp_regread TO XYuser.

但要小心,以后可能会引起问题。就像SSMS中的备份对话框不适用于那个人。

答案 2 :(得分:0)

要重现此问题,首先必须在两个不同的错误之间做出改变:“访问被拒绝。”并且'EXECUTE权限被拒绝'。

第一个错误是由于非sysadmin用户的配置问题。第二个原因是由于缺乏对扩展程序的执行权限。

对于两者,请关注帖子How to configure permissions for xp_regread