Sql-Server
使用伺服器角色向所有數據庫授予權限
我知道這個問題已經被問過很多次了,但他們都是 3 歲以上,所以我要再問一次來試試運氣。
我需要授予 MSSQL 伺服器上所有數據庫的讀取權限。我想使用伺服器角色來實現這一點。
我創建了具有以下權限的伺服器角色
CREATE SERVER ROLE ReadOnlyAccess GO GRANT VIEW ANY DEFINITION TO ReadOnlyAccess Go GRANT VIEW ANY DATABASE TO ReadOnlyAccess GO GRANT VIEW SERVER STATE TO ReadOnlyAccess GO GRANT CONNECT SQL TO ReadOnlyAccess; GO
將使用者分配給此角色允許我連接到伺服器但不擴展任何數據庫。我認為“GRANT VIEW ANY DATABASE”將是賦予這些權利的人,但男孩是我錯了……
有沒有辦法在不為使用者授予每個數據庫上的 db_datareader 數據庫角色的情況下實現這一點?新數據庫不斷被創建,因此手動執行此操作將是一場噩夢。我猜創建一個每隔幾個小時執行一次的作業就可以解決問題,但我仍然希望通過伺服器角色來完成它。
有任何想法嗎?我正在使用 SQL 2016 及更高版本。
除了閱讀我的答案之外,請查看Aaron Bertrand的這個問答
如何在 SQL Server 2012 上創建只讀伺服器角色?
此解決方案適用於 SQL Server 2014 及更高版本。
CREATE LOGIN [AccountNeedPermission] FROM WINDOWS WITH DEFAULT_DATABASE=[master]; GO GRANT CONNECT ANY DATABASE to [AccountNeedPermission]; GO GRANT SELECT ALL USER SECURABLES to [AccountNeedPermission]; GO GRANT VIEW ANY DEFINITION to [AccountNeedPermission]; GO
解決方案不起作用的原因伺服器角色不能被授予對數據庫級安全對象的權限。