Eu tenho um servidor que possui vários bancos de dados contidos nesse mesmo servidor/projeto. Estou usando o MS SQL Server 2012.
Eu tenho uma função especial configurada com 3 usuários que fazem parte dessa função. Eu gostaria de conceder acesso Select à função para todas as tabelas que estão dentro de 1 banco de dados específico.
O banco de dados em questão é um banco de dados de arquivamento que possui tabelas de arquivamento para cada mês dos últimos 12 anos. Ao criar originalmente a função, concedi acesso apenas executando o seguinte:
GRANT SELECT ON [dbo].[myarchivetable] TO myspecialrole
vai
Isso funcionou muito bem porque eu teria que alterar o ano e o mês e executar tudo como um script.
Agora estou descobrindo que eles estão precisando de acesso Select a todas as tabelas no banco de dados de arquivo. Eu poderia fazer o método acima, no entanto, tendo que escrever tudo isso 132 vezes, seria muito fácil cometer um erro.
Como posso adicionar facilmente o myspecialrole a todas as tabelas desse banco de dados?
Se todas as suas tabelas estiverem no esquema dbo, isso deve funcionar, você pode apenas negar tabelas únicas, se necessário
Você pode usar a função de banco de dados interna
db_datareader
ou você pode criar sua própria função de banco de dados
Você pode gerar e executar uma tabela de sistema sql com sysobjects da seguinte forma:
Para conceder
SELECT
permissões em todo o banco de dados, use isto:Onde
<MY_USER>
é usuário<MY_DATABASE>
é o nome do banco de dadosConceder permissões no esquema não ajuda, razão simples: se ocorrerem novos esquemas, o usuário não terá permissões.
Conceder permissões em todos os objetos não pelo mesmo motivo, o usuário não terá permissões em novos objetos criados após o
GRANT
evento.