Sql-Server

使用伺服器角色向所有數據庫授予權限

  • April 16, 2020

我知道這個問題已經被問過很多次了,但他們都是 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

解決方案不起作用的原因伺服器角色不能被授予對數據庫級安全對象的權限

引用自:https://dba.stackexchange.com/questions/265161