Sql-Server
數據庫使用者權限:GRANT VIEW DEFINITION 但拒絕某些對像類型
我試圖找出允許合作夥伴查看基本數據庫架構但不公開包括程式碼在內的對象的權限組合。所以,
- 在 TABLES 上查看和選擇(包括鍵)
- 阻止/拒絕視圖、儲存過程、函式。
我曾考慮過並拒絕單個對象,但這不會保護任何新創建的對象。
補充考慮 - 我需要讓它在 SQL Azure 中工作。
您可以創建一個角色,然後授予/撤銷它的權限。屬於該角色的任何使用者都將繼承權限。
下面是一個幫助您入門的範例:
-- Create the database role CREATE ROLE TableSelector AUTHORIZATION [dbo] GO ---- Grant access rights to a specific schema in the databas GRANT SELECT ON SCHEMA::dbo TO TableSelector GO -- Add an existing user to the new role created EXEC sp_addrolemember 'TableSelector', 'MyDBUser' GO -- Revoke access rights on a schema from a role DENY ALTER -- you can customize here ... ON SCHEMA::dbo TO TableSelector
我想也許你只需要一個允許的對象列表。這可以在下面的腳本中完成,也可以在 Kin 描述的定義角色中完成。下面是使用定義允許對象列表的表變數向使用者授予權限的範例。
DECLARE @AllowedObjects AS TABLE( name SYSNAME ) INSERT INTO @AllowedObjects SELECT N'dbo.Table1' UNION SELECT N'dbo.Table2' DECLARE @name SYSNAME DECLARE names CURSOR FOR SELECT name FROM @AllowedObjects OPEN names FETCH NEXT FROM names INTO @name WHILE(@@FETCH_STATUS <> -1) BEGIN IF (@@FETCH_STATUS <> -2) BEGIN EXEC ('GRANT SELECT ON OBJECT::' + @name + ' TO userName') END FETCH NEXT FROM names INTO @name END CLOSE names DEALLOCATE names