Вот SQL дает вам право выбора / вставки / обновления / удаления для каждого объекта
Вы можете использовать схему, таблицу, пользовательский фильтр, используя / комментируя те, которые вы не используете в конце SQL.
SELECT *
FROM
(
SELECT
schemaname
,objectname
,usename
,HAS_TABLE_PRIVILEGE(usrs.usename, fullobj, 'select') AND has_schema_privilege(usrs.usename, schemaname, 'usage') AS sel
,HAS_TABLE_PRIVILEGE(usrs.usename, fullobj, 'insert') AND has_schema_privilege(usrs.usename, schemaname, 'usage') AS ins
,HAS_TABLE_PRIVILEGE(usrs.usename, fullobj, 'update') AND has_schema_privilege(usrs.usename, schemaname, 'usage') AS upd
,HAS_TABLE_PRIVILEGE(usrs.usename, fullobj, 'delete') AND has_schema_privilege(usrs.usename, schemaname, 'usage') AS del
,HAS_TABLE_PRIVILEGE(usrs.usename, fullobj, 'references') AND has_schema_privilege(usrs.usename, schemaname, 'usage') AS ref
FROM
(
SELECT schemaname, 't' AS obj_type, tablename AS objectname, schemaname + '.' + tablename AS fullobj FROM pg_tables
UNION
SELECT schemaname, 'v' AS obj_type, viewname AS objectname, schemaname + '.' + viewname AS fullobj FROM pg_views
) AS objs
,(SELECT * FROM pg_user) AS usrs
ORDER BY fullobj
)
WHERE (sel = true or ins = true or upd = true or del = true or ref = true)
and usename = '<user>'. -- for a user filter
and schemaname = '<schema>'. -- for a schema filter
and objectname = '<table or view>'. -- for a table filter
Вывод будет выглядеть так
schemaname objectname usename sel ins upd del ref
information_schema applicable_roles user1 true false false false false
information_schema check_constraints user1 true false false false false
information_schema column_domain_usage user1 true false false false false
Если вы хотите видеть только пользователей, имеющих доступ к определенной схеме / таблице, используйте требуемые фильтры и измените первую строку на
SELECT distinct usename