Estou com um problema ao definir a VIEW DEFINITION
permissão adequadamente no nível do esquema para um dos meus usuários. Eu criei o esquema TestSchema
e adicionei algumas tabelas. O usuário tem actualmente permissões definidas para o acesso e modificar a tabela ( SELECT
, UPDATE
, DELETE
, etc) através dos dbo_datareader
e dbo_datawriter
papéis. No entanto, eles não podem ver nenhuma tabela no explorador de objetos do SSMS.
Eu tentei conceder permissões para visualizar definições:
grant view definition on SCHEMA :: [TestSchema] to [User]
Isso não funcionou. Tentei definir a permissão no nível da tabela:
grant view definition on [TestSchema].[NewTable] to [User]
Isso também não funcionou. Então eu tentei apenas uma concessão geral:
grant view definition to [User]
E que fez trabalho; agora eles podem ver TestSchema
, além de outros esquemas aos quais não deveriam ter acesso.
Meu objetivo aqui é permitir que o usuário visualize todas as tabelas em um determinado esquema. Como eu faço isso? Se eu deveria ser capaz de fazer isso por padrão, as permissões que eu deveria estar olhando para encontrar porque eu não posso?
Respostas:
Resposta curta: não use
db_datareader
oudb_datawriter
negue seus equivalentes. Eles são apenas para compatibilidade com versões anteriores. Usá-los causará problemas como o que você está enfrentando.Se você deseja conceder a Alice principal as permissões SELECT, INSERT, UPDATE e DELETE para todos os objetos com valor de tabela no esquema Sales, use o seguinte.
Se você deseja conceder a Alice principal as permissões SELECT, INSERT, UPDATE e DELETE para todos os objetos com valor de tabela em todos os esquemas, use o seguinte.
A visibilidade dos metadados funcionará corretamente.
fonte
Dê uma olhada nas entidades, outras permissões, pode haver uma recusa em algum lugar que esteja causando o problema. Lembre-se de que uma negação sempre será aplicada por cima de uma concessão. E como não é seu servidor, pode haver algo na conta que o departamento de TI tenha configurado.
Use algo assim para o nível do servidor:
E algo assim no nível do banco de dados
fonte
Isso aconteceu comigo quando atualizei nosso SQL Server de 2008R2 para 2014. db_datareader ou db_datawriter ou seus equivalentes de negação funcionam perfeitamente bem em 2008R2, mas eles não funcionam em 2014.
Exemplo para conceder permissão no SQL Server 2014
Se você deseja conceder ao usuário Alice as permissões SELECT, INSERT, UPDATE e DELETE para todos os objetos com valor de tabela no esquema Sales, use o seguinte.
SUBSTITUIR SELECIONAR, INSERIR, ATUALIZAR, EXCLUIR NO ESQUEMA :: Vendas para Alice; Se você deseja conceder a Alice principal as permissões SELECT, INSERT, UPDATE e DELETE para todos os objetos com valor de tabela em todos os esquemas, use o seguinte.
CONTRATAR SELECIONAR, INSERIR, ATUALIZAR, EXCLUIR PARA Alice; A visibilidade dos metadados funcionará corretamente.
fonte