Sql-Server

在 MS SQL 中授予對特定數據庫中所有表的 Select 訪問權限

  • October 20, 2021

我有一台伺服器,該伺服器具有多個數據庫,這些數據庫包含在同一伺服器/項目中。我正在使用 MS SQL Server 2012。

我設置了一個特殊角色,其中有 3 個使用者是該角色之外的。我想授予 Select 訪問 1 個特定數據庫中所有表的角色的權限。

有問題的數據庫是一個存檔數據庫,其中包含過去 12 年中每個月的存檔表。最初創建角色時,我僅通過執行以下命令來授予訪問權限:

GRANT SELECT ON [dbo].[myarchivetable] TO myspecialrole

這很好用,因為我只需要更改年份和月份並將其全部作為 1 個腳本執行。

我現在發現他們需要選擇訪問存檔數據庫中的每個表。我可以做上面的方法,但是要寫132遍,很容易出錯。

如何輕鬆地將 myspecialrole 添加到該數據庫中的每個表?

如果您的所有表都在 dbo 模式中,那麼這應該可以工作,如果需要,您可以拒絕單個表

GRANT SELECT ON SCHEMA :: [dbo] TO myspecialrole

您可以使用內置的數據庫角色db_datareader

EXEC sp_addrolemember N'db_datareader', N'<MYUSER>'

或者您可以創建自己的數據庫角色

USE <MYDB>
CREATE ROLE [<MYROLE>]
GRANT SELECT ON SCHEMA::[dbo] TO <MYROLE>
EXEC sp_addrolemember N'<MYROLE>', N'<MYUSER>'

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