Não existe essa visualização pronta para uso, mas os dados necessários para criá-la estão nos catálogos do sistema:
http://www.postgresql.org/docs/current/static/catalogs.html
Por exemplo, há um
relacl
campo em pg_class
:select oid::regclass, relacl from pg_class;
Existem campos semelhantes em outros catálogos, nomeadamente
typacl
em pg_type
e proacl
em pg_proc
. Você provavelmente desejará usar mais dois catálogos, a saber,
pg_authid
para saber quais funções têm privilégios de superusuário e pg_auth_members
saber quem tem qual papel. (O
pg_default_acl
é usado apenas durante a criação do objeto, portanto, não é útil.) Existem algumas funções internas relacionadas ao aclitem que podem ser úteis na criação da exibição. Você pode listá-los em
psql
igual a:\df+ *acl*
Em particular
aclexplode()
. Esperamos que o exemplo a seguir seja suficiente para você começar:select oid::regclass,
(aclexplode(relacl)).grantor,
(aclexplode(relacl)).grantee,
(aclexplode(relacl)).privilege_type,
(aclexplode(relacl)).is_grantable
from pg_class
where relacl is not null;
Ele pode ser otimizado expandindo primeiro as linhas acl, por exemplo:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Ele vai te levar direto ao resultado desejado.
Até onde eu sei, isso é o melhor possível usando as ferramentas internas. (Naturalmente, você pode escrever seu próprio conjunto de operadores em C se quiser tentar otimizar ainda mais.)
Com relação às suas perguntas extras, temo que elas só possam ser respondidas por um punhado de pessoas no mundo, também conhecidas como os próprios desenvolvedores principais. Eles ficam na lista de hackers da página com mais frequência do que aqui.