Postgresql запрос, который печатает разрешения уровня базы данных - PullRequest
0 голосов
/ 27 мая 2020

Теперь я пытаюсь отобразить только пользователя, схему и таблицы, но также показать базу данных, к которой принадлежат схема и таблицы. Есть предложения, что мне добавить к этому запросу?

SELECT
    u.usename as user, t.schemaname as schema, t.tablename as table,
    has_table_privilege(u.usename,t.schemaname||'.'||t.tablename,'select') AS "Select",
    has_table_privilege(u.usename,t.schemaname||'.'||t.tablename,'insert') AS "Insert",
    has_table_privilege(u.usename,t.schemaname||'.'||t.tablename,'update') AS "Update",
    has_table_privilege(u.usename,t.schemaname||'.'||t.tablename,'delete') AS "Delete",
    has_table_privilege(u.usename,t.schemaname||'.'||t.tablename,'references') AS "Reference"
FROM pg_user u
CROSS JOIN pg_tables t
WHERE t.schemaname != 'information_schema' and t.schemaname != 'pg_internal' and t.schemaname != 'pg_catalog' and t.tablename not like '% %'
ORDER BY u.usename, t.schemaname, t.tablename;

1 Ответ

2 голосов
/ 28 мая 2020

Предлагаю заглянуть в information_schema. *. Это sql стандартов, и в таблице information_schema.tables должно быть то, что вы хотите.

Вы можете заменить использование pg_tables как таковое:

select
    u.usename                                                                           as user,
    t.table_catalog                                                                     as database,
    t.table_schema                                                                      as schema,
    t.table_name                                                                        as table,
    has_table_privilege(u.usename, t.table_schema || '.' || t.table_name, 'select')     as "Select",
    has_table_privilege(u.usename, t.table_schema || '.' || t.table_name, 'insert')     as "Insert",
    has_table_privilege(u.usename, t.table_schema || '.' || t.table_name, 'update')     as "Update",
    has_table_privilege(u.usename, t.table_schema || '.' || t.table_name, 'delete')     as "Delete",
    has_table_privilege(u.usename, t.table_schema || '.' || t.table_name, 'references') as "Reference"
from
    pg_user                              u
    cross join information_schema.tables t
where
    t.table_schema != 'information_schema' and t.table_schema != 'pg_internal' and t.table_schema != 'pg_catalog'
    and t.table_schema not like '% %'
order by
    u.usename, t.table_schema, t.table_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...