Conceder acesso a todas as tabelas de um banco de dados


13

Recentemente queria compartilhar os direitos de acesso regulares com um usuário de um servidor e eu percebi que um simples CREATE USERe GRANT ALL ON DATABASEcomandos não deixá-lo correr um simples SELECTsobre os dados.

Gostaria de conceder direitos a todas as tabelas de um determinado banco de dados para um usuário especificado, mas não tenho certeza se é a melhor ideia conceder a ele acesso a todo o esquema, publicpois não sei se isso permitiria algum tipo de privilégio escalação. Existe alguma outra maneira?


Por que você não pode apenas GRANT SELECT ON TableName TO [Domain\User]? Normalmente, apenas atribuo usuários à db_datareaderfunção se tudo o que eles precisam é acesso de leitura a todas as tabelas, mas não tenho certeza de quão granular você deseja ser.
Kris Gruttemeyer

Eu gostaria de conceder todo o CRUD a todas as tabelas no banco de dados. Além disso, DROPping e CREATEing dentro desse banco de dados também podem ser úteis.
d33tah

Respostas:


19

O privilégio de DATABASEconceder apenas direitos gerais de conexão ao banco de dados e não mais. Um usuário com apenas esse privilégio pode ver apenas o que o público em geral tem permissão para ver.

Para conceder acesso de leitura a todas as tabelas , você também precisa de privilégios em todos os esquemas e tabelas:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

Você também pode definir privilégios padrão para futuros esquemas e tabelas. Executar para cada função que cria objetos em seu banco de dados

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

Mas você realmente precisa entender o conceito inteiro primeiro.
E quase sempre é melhor agrupar privilégios em funções de grupo e conceder / revogar a função de grupo para / de funções de usuário. Palavras-chave:


É myusrum erro de digitação? Não deveria ser myuser?
Attomo 14/02

1
@attomos: É suposto ser um usuário diferente no exemplo. Eu esclareci.
Erwin Brandstetter
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.