SQL Server - conceder permissões para um esquema inteiro versus objeto?

25

Eu sou muito verde quando se trata do mundo do gerenciamento de permissões de banco de dados no SQL Sever.

Vamos manter um exemplo simples.

Digamos que a conta 'admin' seja a proprietária dos esquemas A, B e C.

Existe outra conta 'minion' que você deseja ter direitos totais (atualização / exclusão / inserção / seleção / alteração) em qualquer objeto (tabela / exibição) criado sob os esquemas A, B e C.

Isso é possível? Ou você precisa executar uma declaração de concessão toda vez que adicionar uma tabela / exibição nesses esquemas? (parece um pouco bobo para mim).

user45867
fonte

Respostas:

36

Você pode GRANTpermissões de esquema eficazes para tudo o que existe e tudo o que existe nesse esquema.

Conceder permissões de esquema

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

Além disso, se você quiser negar permissões em um determinado objeto dentro desse esquema, poderá fazê-lo.

Negando permissões de objeto

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Mark Sinkinson
fonte
1
Também use colchetes se o esquema ou nome de usuário tiver caracteres especiais. por exemplo.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Joshua Duxbury
Não funciona no Azure, tem alguma ideia do porquê? (os comandos funcionam, mas o SSMS aparece e diz "você não é o proprietário do banco de dados .. blá blá blá. Talvez você não consiga salvar a tabela" e, com certeza, não pode (fez um Grant ALL no banco de dados (mostra permissões 'banco de dados', '<nome db>', TheUserId, 'Criar Tabela', e state_desc de 'GRANT') existe alguma outra mágica que é necessário ou é Azure utilizável apenas pelo dbo?
Traderhut Jogos
13

Para simplificar um pouco mais, você pode usar funções para fazer o trabalho que está procurando.

Depois de atribuir permissões à função, você pode adicionar usuários à função. Dessa forma, você não precisa gerenciar permissões para usuários individuais. Os usuários herdam as permissões concedidas à função.

Abaixo está um exemplo para você começar:

 -- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
 ---- Grant access rights to a specific schema in the database
GRANT 
      SELECT, INSERT, UPDATE, DELETE, ALTER 

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 Shah
fonte