Sql-Server

數據庫使用者權限:GRANT VIEW DEFINITION 但拒絕某些對像類型

  • April 11, 2013

我試圖找出允許合作夥伴查看基本數據庫架構但不公開包括程式碼在內的對象的權限組合。所以,

  1. 在 TABLES 上查看和選擇(包括鍵)
  2. 阻止/拒絕視圖、儲存過程、函式。

我曾考慮過並拒絕單個對象,但這不會保護任何新創建的對象。

補充考慮 - 我需要讓它在 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

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