Permissions

如何授予數據庫權限但僅限於某些模式?

  • April 23, 2019

我是數據庫管理的新手,並且在一個試圖實現現代化的數據分析師小團隊中工作。我們最近設置了一個使用 SQL Server Management Studio 訪問的 Azure SQL DB 伺服器。

我們有一個管理員帳戶,我為我們每個人創建了一個使用者登錄名,用於日常工作。我希望所有使用者登錄都能夠為架構未指定或指定為“dbo”的所有對象自由創建、刪除、選擇等,但只有架構指定為“testschema”的只讀權限. 我使用管理員帳戶中的以下程式碼嘗試了此操作:

IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'testschema')) 
BEGIN
   EXEC ('CREATE SCHEMA [testschema] AUTHORIZATION [dbo]')
END

---- Create permissions group:
EXEC sp_addrolemember 'team_member', 'Mel';

-- GRANT BLANKET PERMISSIONS
GRANT CONTROL, ALTER, DELETE, EXECUTE, INSERT, REFERENCES, UPDATE ON SCHEMA::dbo TO team_member;

-- REVOKE PERMISSIONS TO SPECIFIED SCHEMAS
DENY CONTROL, ALTER, DELETE, EXECUTE, INSERT, REFERENCES,
         UPDATE ON SCHEMA::testschema TO team_member;

-- ALLOW TO SELECT AND VIEW ON THESE SCHEMAS
GRANT SELECT, VIEW DEFINITION ON SCHEMA::testschema TO team_member;

我整個早上都在嘗試授予、撤銷和拒絕自己的權限,但我似乎無法正確設置權限,以便我的使用者帳戶可以使用“dbo”架構創建和刪除表,並從表中查看和選擇使用“testschema”模式,但不能使用“testschema”模式刪除/更改/刪除表。

誰能建議這樣做的正確語法?

編輯:我已將原始程式碼稍微更改為 DENY 而不是 REVOKE,而不是一般權限,我設置了特定於 dbo 的模式權限。權限如下所示並且看起來是正確的,但 team_member 使用者仍然無法查看或從任何測試模式表中進行選擇(除了“testschema”和“dbo”之外,沒有其他目前使用的模式)。

權限表視圖

一個組合DENY和一個GRANT適合我的作品。

例如:

GRANT SELECT ON schema::[dbo] TO [user_name]
DENY SELECT ON schema::[other_schema] TO [user_name]
DENY SELECT ON schema::[schema_1] TO [user_name]
GRANT SELECT ON schema::[schema_Safe] TO [user_name]

如果您需要防止某些使用者刪除表,請嘗試以下操作:

DENY DELETE ON OBJECT::dbo.table_to_deny TO restricted_user;

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