Os usuários não podem exibir tabelas no esquema não padrão no SSMS


10

Estou com um problema ao definir a VIEW DEFINITIONpermissão adequadamente no nível do esquema para um dos meus usuários. Eu criei o esquema TestSchemae 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_datareadere dbo_datawriterpapé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?


Na minha instância 2008R2, quando concedo db_datareader ou db_datawriter, eles podem ver todos os esquemas. Sei que não é isso que você está procurando, mas significa que há uma diferença significativa entre a sua configuração e a minha, por isso não posso testá-lo. A versão é tudo diferente ou alguma outra segurança foi modificada?
Cfradenburg 25/10/12

@ cfradenburg - É difícil dizer; este é um servidor gerenciado por TI; portanto, não tenho certeza do que eles fizeram e sou iniciante no SQL Server; portanto, não sei o que procurar. Acho que parte da minha pergunta é: quais outras permissões / funções / ??? devo procurar para determinar se isso pode ser simplesmente corrigido por permissões?
eykanal

O usuário pode consultar as tabelas? Se eles puderem consultar, pode ser apenas um problema no SSMS.
user9164

@ user9164 Sim, os usuários podem consultar as tabelas; é apenas uma questão de visualizá-los no SSMS.
eykanal

Respostas:


11

Resposta curta: não use db_datareaderou db_datawriternegue 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.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO 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.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

A visibilidade dos metadados funcionará corretamente.


Você tem uma fonte para o bit 'compatibilidade com versões anteriores'? Entendo que os esquemas foram descontinuados, mas não consigo encontrar nada sobre as funções.
Stijn

0

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:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

E algo assim no nível do banco de dados

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO

Obrigado pelo comentário, tentarei fazer isso quando voltar ao trabalho na segunda-feira.
eykanal

0

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.

Referência [Greenstone Walker].


11
Sundeep, tente explicar uma resposta em vez de apenas fornecer um link. Se precisar de ajuda, confira o tour
LowlyDBA
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.