Já vi muitas perguntas sobre alguém tentando conceder uma role_specification a algum other_role , mas recebendo o GRANT
erro
ERROR: must have admin option on role
role_specification
e todas as respostas, de uma forma ou de outra, parecem resumir-se a "Isso está acontecendo porque o WITH ADMIN
não foi usado quando o original foi emitido."GRANT
role
TO
role_specification
...
Então agora eu não posso fazer GRANT
role_specification
TO
other_role
Mas o que me surpreendeu é que não consigo encontrar nada sobre como realmente ver se a opção admin está definida para uma função. Respostas como Liste os privilégios do banco de dados usando o psql revelam privilégios para funções, mas nenhum desses atributos parece corresponder ao arquivo admin option
. A documentação do Postgres também parece muda sobre isso.
Então... onde o Postgres controla isso e como posso consultá-lo?
Com base na resposta de @Erwin Brandstetter, tenho algumas perguntas mais profundas...
- \drg não está disponível para mim. Presumo que esteja em uma versão do Postgres mais recente que 13?
- Isso torna o SQL realmente valioso, mas não tenho certeza de como isso se traduz. Meu resultado é:
SELECT roleid::regrole, member::regrole, grantor::regrole, admin_option
FROM pg_auth_members where roleid::regrole::text like 'content%';;
roleid | member | grantor | admin_option
---------------+---------------+---------------+--------------
content_adm | int_web_admin | content_adm | f
content_rwd | randall | postgres | f
content_rwd | content_adm | postgres | f
Todos os roleid
s têm as admin_option
false em todas as linhas da tabela pg_auth_members (mas um postgres
roleid notavelmente não estava lá). Mesmo assim, content_adm pode conceder content_adm à função int_web_admin, mas não pode conceder content_rwd a ela.
As linhas relevantes do \du
show:
Role name | Attributes | Member of
------------------+----------------+----------------------------------
content_adm | | {content_rwd}
content_rwd | Cannot login | {}
randall | | {content_rwd}
int_web_admin | | {sys_role,content_adm}
(Acredito que a associação content_adm e randall de content_rwd foi configurada pelo DBA anterior)
Portanto, minha segunda pergunta complementar é: Como traduzo o resultado da consulta SQL em informações semelhantes às \drg
?