2012-04-12 77 views
0

我有很多用於不同客戶端的存儲過程,因爲少數客戶端有一個用戶需要爲AdminRole添加AdminRole和執行權限,因爲少數客戶端沒有用戶AdminRole和沒有必要擁有執行權限。存儲過程在sql server中的執行權限問題

每個存儲過程具有

對於前:

CREATE PROCEDURE PROCEDURENAME AS 

SELECT FIRSTNAME FROM TABLE1 

GO 

GRANT EXECUTE ON PROCEDURENAME TO ADMINROLE 

GO 

這一行到底,但是這無法在沒有管理員角色來執行。我如何在SQL存儲過程中實現這個邏輯?

If userrole contains AdminRole then 

    --Execute these 2 lines 

GRANT EXECUTE ON PROCEDURENAME TO ADMINROLE 
GO 

else 

'Do nothing 

回答

1

不知道如果在你的解決方案「AdminRole」其實SQL登錄,SQL用戶或SQL數據庫角色

如果「AdminRole」是SQL的用戶(在數據庫級別)或SQL角色(在數據庫級;相同的語法),並要檢查,如果存在的話(而不是檢查當前用戶是否AdminRole或AdminRole的ismember),這樣做:

IF EXISTS(SELECT name FROM sys.database_principals WHERE name='AdminRole') 
BEGIN 
    -- do your GRANT here 
END 

如果「AdminRole」是SQL登錄(在服務器級別) ,請執行以下操作:

IF EXISTS(SELECT name FROM sys.server_principals WHERE name='AdminRole') 
BEGIN 
    -- do your GRANT here 
END 
1

,如果有大量的存儲過程,你想ADMINROLE有執行權限數據庫中的所有存儲的特效運行以下命令

IF USER_ID ('AdminRole')IS NOT NULL 授予執行[AdminRole] ELSE 打印'AdminRole在數據庫中不存在'

+0

這是數據庫級別而不是在每個存儲過程中運行? – Sharpeye500 2012-04-12 20:07:11