在SQL Server 2005中,有建於角色:SQL Server 2005中的內置數據庫角色允許執行存儲過程?
的db_datareader
db_datawriter權限
等
是否有讓用戶執行存儲過程的任何作用?
我不想使用db_owner,因爲這將允許刪除和更新,我不需要。我唯一需要的權限是:
選擇
EXECUTE
在SQL Server 2005中,有建於角色:SQL Server 2005中的內置數據庫角色允許執行存儲過程?
的db_datareader
db_datawriter權限
等
是否有讓用戶執行存儲過程的任何作用?
我不想使用db_owner,因爲這將允許刪除和更新,我不需要。我唯一需要的權限是:
選擇
EXECUTE
看看這個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'
不,我不相信有一個數據庫或服務器角色 - 你必須精細地授予執行權限用戶爲相關的存儲過程。
或者你可以把用戶分爲角色和授予的權限給每個PROC的作用,而不是1000個不同的充用戶。 – HLGEM 2010-02-19 22:40:39
要對答案擴大,一般的主旨是創建一個數據庫角色和權限分配給該角色。爲了做到這一點,你需要一些花哨的動態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
此代碼將授予執行存儲過程和標量函數並選擇返回表類型的用戶定義的函數。
CREATE ROLE db_executor
GRANT EXECUTE TO db_executor
現在,如果重新啓動SQL Server Management Studio中,當您單擊安全 - 「用戶映射」頁>登錄部分,你會看到「db_executor」出現在角色列表。只需添加用戶,也可以手動做到這一點:
EXEC sp_addrolemember 'db_executor', 'AccountName'
你不需要重新啓動SSMS來查看新的角色。只需右鍵單擊安全性 - >服務器角色容器文件夾,然後選擇「刷新」 – shahzbot 2015-01-02 14:41:36
但@Peter所說的基本上是正確的......您將需要授予用戶名執行權限......本網站將爲您提供一種快捷方式。 – Aaron 2010-02-19 17:22:17
這是一個可愛的解決方案!你有我的投票... – 2010-02-19 17:23:03