2011-01-10 123 views
1

我有一個客戶端,正在訪問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

回答

2

這是一個擴展存儲過程,需要

EXEC master..xp_regread ... 

然後,這將是

USE master 
GO 
GRANT EXECUTE ON xp_regread TO public 
GO 

如果明確的拒絕已經被設置,那麼REVOKE將其刪除。這與GRANT不一樣。這僅適用於普通用戶。

任何對主系統管理員權限或db_owner(SA在主DBO)將繞過權限反正

1

你應該明確地DENY權限:

GRANT DENY ON xp_regread TO XYuser. 

不過要小心,日後可能會導致問題。就像SSMS中的備份對話框不適用於該人員。

0

要重現此問題,首先必須對兩個不同的錯誤進行區分:「訪問被拒絕」。和「EXECUTE權限被拒絕」。

第一個錯誤是由於非系統管理員用戶的配置問題。第二個原因是缺乏對擴展過程的執行權限。

對於兩者請按照帖子How to configure permissions for xp_regread