GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
O usuário somente leitura pode se conectar, ver as tabelas, mas quando tenta fazer uma seleção simples, obtém:
ERROR: permission denied for relation mytable
SQL state: 42501
Isso está acontecendo no PostgreSQL 9.1
O que eu fiz de errado?
postgresql
Sorin
fonte
fonte
Respostas:
Aqui está a solução completa para PostgreSQL 9+, atualizada recentemente.
Agradecemos a https://jamie.curle.io/creating-a-read-only-user-in-postgres/ por vários aspectos importantes
Se alguém encontrar um código mais curto, e de preferência um que seja capaz de fazer isso para todos os bancos de dados existentes, elogios extras.
fonte
GRANT ALL
permissão por padrão ao usuário somente leitura?\ddp
. Deve mostrar apenas=r/
comogranting_user=r/readonly_user
apenas acesso de leitura.Tente adicionar
Você provavelmente não sabia que é necessário ter as permissões necessárias para um esquema, a fim de usar objetos no esquema.
fonte
psql
comopostgres
usuário e obtenho uma resposta adequadaGRANT
,. Ainda assim, quando olho para a ACL nas tabelas, vejo apenas duas outras contas, uma sendo o proprietário do banco de dadosjirauser
e outra conta somente leitura chamadaqauser
. Mas o meureadonly
não aparece lá. Postgres é a versão 9.1 e até reiniciei o servidor, ainda não acontece nada.Isso funcionou para mim:
Verifique a função atual na qual você está conectado usando: SELECT CURRENT_USER, SESSION_USER;
Observação : ele deve corresponder ao proprietário do esquema.
Schema | Nome Tipo | Proprietário
-------- + -------- + ------- + ----------
Se o proprietário for diferente, conceda todas as concessões à função de usuário atual da função de administrador ao:
GRANT 'ROLE_OWNER' para 'CURRENT ROLENAME';
Em seguida, tente executar a consulta, ela dará a saída, pois agora tem acesso a todas as relações.
fonte
certifique-se de que seu usuário tenha atributos em sua função. por exemplo:
depois de executar o seguinte comando:
resolveu o problema.
veja o tutorial para funções e outras coisas aqui: https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
fonte
ERROR: permission denied for relation mytable
Você deve executar a próxima consulta:
Ou se o seu erro está em uma visualização, talvez a tabela não tenha permissão, então você deve executar a próxima consulta:
fonte
ALTER DROP DELETE
Ect. Para aquele usuário ...