2010-02-19 91 views

回答

21

看看這個article。它可以爲您提供一個有趣的想法,快速做到這一點。在那篇文章中所使用

代碼:

/* Create a new role for executing stored procedures */ 
CREATE ROLE db_executor 

/* Grant stored procedure execute rights to the role */ 
GRANT EXECUTE TO db_executor 

/* Add a user to the db_executor role */ 
EXEC sp_addrolemember 'db_executor', 'AccountName' 
+0

但@Peter所說的基本上是正確的......您將需要授予用戶名執行權限......本網站將爲您提供一種快捷方式。 – Aaron 2010-02-19 17:22:17

+0

這是一個可愛的解決方案!你有我的投票... – 2010-02-19 17:23:03

2

不,我不相信有一個數據庫或服務器角色 - 你必須精細地授予執行權限用戶爲相關的存儲過程。

+1

或者你可以把用戶分爲角色和授予的權限給每個PROC的作用,而不是1000個不同的充用戶。 – HLGEM 2010-02-19 22:40:39

0

要對答案擴大,一般的主旨是創建一個數據庫角色和權限分配給該角色。爲了做到這一點,你需要一些花哨的動態SQL如:

Set @Routines = Cursor Fast_Forward For 
    Select ROUTINE_SCHEMA + '.' + ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE 
    From INFORMATION_SCHEMA.ROUTINES 
    Where ROUTINE_NAME NOT LIKE 'dt_%' 
     Or ROUTINE_TYPE = 'FUNCTION' 

Open @Routines 
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 

While @@Fetch_Status = 0 
Begin 
    Set @Msg = 'Procname: ' + @Procname + ', Type: ' + @RoutineType + ', DataType: ' + Coalesce(@DataType,'') 
    Raiserror(@Msg, 10, 1) WITH NOWAIT 

    If @RoutineType = 'FUNCTION' And @DataType = 'TABLE' 
     Set @SQL = 'GRANT SELECT ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 
    Else 
     Set @SQL = 'GRANT EXECUTE ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 

    exec(@SQL) 

    Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 
End 

Close @Routines 
Deallocate @Routines

此代碼將授予執行存儲過程和標量函數並選擇返回表類型的用戶定義的函數。

2
CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

現在,如果重新啓動SQL Server Management Studio中,當您單擊安全 - 「用戶映射」頁>登錄部分,你會看到「db_executor」出現在角色列表。只需添加用戶,也可以手動做到這一點:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

你不需要重新啓動SSMS來查看新的角色。只需右鍵單擊安全性 - >服務器角色容器文件夾,然後選擇「刷新」 – shahzbot 2015-01-02 14:41:36