Estou usando um software de terceiros mal documentado que faz coisas esotéricas com o PostgreSQL 9.3. Em algum momento durante sua configuração, ele tenta o seguinte:
UPDATE pg_opclass SET opckeytype=xxxx WHERE ...;
A instrução está sendo executada como um superusuário de banco de dados (embora não postgres
) e falha com este erro:
ERROR: permission denied for relation pg_opclass
Quais permissões preciso conceder para permitir que essa instrução funcione?
Nota nº 1 : tentei conceder todas as permissões nessa tabela sem sucesso.
\z
de psql
relatórios o seguinte ( zzz
é o nome do meu superusuário):
mydb=# \z pg_catalog.pg_opclass
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
------------+------------+-------+----------------------+--------------------------
pg_catalog | pg_opclass | table | =r/postgres +|
| | | zzz=arwdDxt/postgres |
(1 row)
mydb=#
Nota #2 : A mesma instrução, quando executada como postgres
usuário, funciona bem.
Acontece que há uma permissão (um pouco oculta) para os usuários, ou seja, se eles têm permissão para "atualizar os catálogos do sistema diretamente", que é especificado pela
rolcatupdate
coluna napg_authid
tabela do sistema:https://www.postgresql.org/docs/9.3/static/catalog-pg-authid.html
Esta outra resposta fala sobre como configurá-lo:
https://serverfault.com/a/300421
De qualquer forma, uma vez que eu configurei
TRUE
para o meu usuário, oUPDATE
foi permitido.Essa coluna
pg_authid
parece ter desaparecido a partir do PostgreSQL 9.5.