Запросить список всех пользователей + их схемы.PostgreSQL - PullRequest
0 голосов
/ 20 сентября 2019

Как сказано выше, я хочу перечислить всех пользователей + их схемы (где они получили привилегию USAGE).

Итак, я почти закончил,

Позвольте мне показать вамчто я получил:

SELECT 
    u.usesysid as idUser, 
    u.usename as login,
    u.passwd as password,
    ARRAY(SELECT b.rolname
        FROM pg_catalog.pg_auth_members m
        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE m.member = r.oid) as member_of,
     ARRAY(SELECT nspname
        FROM pg_namespace pn,pg_catalog.pg_roles b
        JOIN pg_catalog.pg_auth_members m ON (m.member = b.oid)
        WHERE pg_catalog.has_schema_privilege(b.rolname, nspname, 'USAGE')= true
        AND m.member = r.oid
        AND nspname <> 'information_schema'
        AND nspname !~~ 'pg\_%') as usage_schemas
FROM 
    pg_catalog.pg_roles r
JOIN 
    pg_catalog.pg_user u on(r.rolname=u.usename)
WHERE
    usename !~ 'postgres'
ORDER BY
    1;

Вот что я получаю: https://image.noelshack.com/fichiers/2019/38/5/1568980459-capture5.png

Это то, что я хочу: https://image.noelshack.com/fichiers/2019/38/5/1568967833-capture4.png

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 23 сентября 2019

Вот правильный:

SELECT
    u.usesysid as idUtilisateur,
    u.usename as login,
    u.passwd as motDePasse,
    ARRAY(SELECT b.rolname
        FROM pg_catalog.pg_auth_members m
        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE m.member = r.oid) as groupes,
    ARRAY(SELECT nspname
        FROM pg_namespace pn
        WHERE pg_catalog.has_schema_privilege(r.rolname, nspname, 'USAGE')= true
        AND nspname <> 'information_schema'
        AND nspname !~~ 'pg_%') as schemas
FROM
    pg_catalog.pg_roles r
JOIN
    pg_catalog.pg_user u on(r.rolname=u.usename)
WHERE
    usename !~ 'postgres'
ORDER BY 
    1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...