Permissions
如何授予數據庫權限但僅限於某些模式?
我是數據庫管理的新手,並且在一個試圖實現現代化的數據分析師小團隊中工作。我們最近設置了一個使用 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;