Po vybalení takový pohled neexistuje, ale data potřebná k jeho vytvoření jsou v systémových katalozích:
http://www.postgresql.org/docs/current/static/catalogs.html
Například existuje relacl
pole v pg_class
:
select oid::regclass, relacl from pg_class;
Podobná pole jsou i v jiných katalozích, jmenovitě typacl
v pg_type
a proacl
v pg_proc
.
Pravděpodobně budete chtít použít další dva katalogy, konkrétně pg_authid
abyste věděli, které role mají oprávnění superuživatele a pg_auth_members
vědět, kdo má jakou roli.
(pg_default_acl
se používá pouze při vytváření objektu, takže není užitečné.)
Existuje několik interních funkcí souvisejících s aclitem, které se mohou hodit při vytváření pohledu. Můžete je uvést v psql
takhle:
\df+ *acl*
Konkrétně aclexplode()
. Následující příklad vám snad bude stačit, abyste mohli začít:
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;
Lze jej optimalizovat tak, že nejprve rozbalíte řádky acl, např.:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Dovede vás přímo k požadovanému výsledku.
Pokud jsem si vědom, je to asi tak dobré, jak to bude možné pomocí vestavěných nástrojů. (Samozřejmě si můžete napsat vlastní sadu operátorů v C, pokud byste to chtěli zkusit dále optimalizovat.)
Pokud jde o vaše dodatečné otázky, obávám se, že na ně může odpovědět jen hrstka lidí na světě, neboli samotní hlavní vývojáři. Setkávají se na seznamu hackerů pg častěji než zde.