Sou muito verde quando se trata do mundo do gerenciamento de permissões de banco de dados no SQL Server.
Vamos manter um exemplo simples.
Digamos que a conta “admin” seja a proprietária dos esquemas A, B e C.
Há outra conta “minion” que você deseja que tenha todos os direitos (atualizar / excluir / insert / select / alter) em qualquer objeto (tabela / visão) criado nos esquemas A, B e C.
Isso é possível? Ou você tem que executar uma instrução de concessão toda vez que adiciona uma tabela / visão a esses esquemas? (parece um pouco bobo para mim).
Resposta
Você pode GRANT
permissões de esquema que são eficazes para tudo o que existe e tudo o que existe nesse esquema.
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;
Além disso, se você deseja negar permissões em um determinado objeto dentro desse esquema, você pode fazer.
DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Comentários
Resposta
Para simplificar um pouco mais, você pode usar funções para fazer o trabalho que está procurando.
Depois de atribuir permissões para a função, você pode simplesmente 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
.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]