Sou novo no Postgres e estou tentando migrar nossos bancos de dados MySQL. No MySQL, posso conceder privilégios SELECT
, UPDATE
, INSERT
e DELETE
privilégios em um usuário com poucos privilégios e permitir que essas concessões se apliquem a todas as tabelas em um banco de dados especificado. Devo estar faltando alguma coisa no Postgres porque parece que tenho que conceder esses privilégios para cada tabela, um de cada vez. Com muitos bancos de dados e centenas de tabelas por banco de dados, parece uma tarefa assustadora apenas para decolar. Além disso, quando um banco de dados está em operação, a adição de tabelas ocorre com frequência suficiente para que eu não queira conceder permissões a cada vez, a menos que seja absolutamente necessário.
Como isso é melhor realizado?
Primeiro, você precisa se conectar ao banco de dados para executar consultas. Isso pode ser alcançado por
O
REVOKE
é necessário porqueSe você realmente deseja restringir seu usuário a instruções DML, você tem um pouco mais a fazer:
Eles assumem que você terá apenas um esquema (que é chamado de 'público' por padrão).
Como Jack Douglas apontou, o acima apenas fornece os privilégios para as tabelas já existentes . Para obter o mesmo para tabelas futuras, você deve definir privilégios padrão :
Aqui,
some_role
é um papel que cria as tabelas, enquantouser_name
é quem obtém os privilégios. Definindo isso, você deve estar logado comosome_role
ou um membro dele.E, finalmente, você tem que fazer o mesmo para as sequências (obrigado ao PlaidFan por apontar) - aqui está o
USAGE
privilégio que você precisa.supondo que você queira dar a eles todos os privilégios - faça isso:
onde
dbname
é o nome do seu banco de dados edbuser
é o nome do usuário.A concessão de todos os privilégios a todas as tabelas do banco de dados é obtida com
Pode ser que eu estivesse fazendo algo errado aqui, pois sou muito novo no PostgreSQL. Mas isso só resolveu a primeira parte do problema para mim - definindo os privilégios em todas as tabelas existentes.
Para que as permissões sejam definidas corretamente para o meu usuário em novas tabelas, que são criadas, tenho que definir as permissões padrão para o usuário: