作者简介
Hans-Jürgen Schönig cybertec公司工程师。
译者简介
王志斌,从事数据库产品相关工作,主要致力于postgresql数据库高可用解决方案及云端产品化工作。
校对者简介
崔鹏,PostgreSQL爱好者,海能达PostgreSQL高级DBA。
CREATE USER a;
CREATE USER b;
CREATE ROLE c LOGIN;
CREATE ROLE d LOGIN;
CREATE ROLE e LOGIN;
CREATE ROLE f LOGIN;
GRANT c TO a;
GRANT d TO c;
GRANT e TO c;
GRANT f TO d;
test=# SELECT oid, rolname, rolcanlogin
FROM pg_authid
WHERE oid > 16384;
oid | rolname | rolcanlogin
---------+---------+-------------
1098572 | a | t
1098573 | b | t
1098574 | c | t
1098575 | d | t
1098576 | e | t
1098577 | f | t
(6 rows)
test=# SELECT *
FROM pg_auth_members
WHERE roleid > 16384;
roleid | member | grantor | admin_option
---------+---------+---------+--------------
1098574 | 1098572 | 10 | f
1098575 | 1098574 | 10 | f
1098576 | 1098574 | 10 | f
1098577 | 1098575 | 10 | f
(4 rows)
test=# WITH RECURSIVE x AS
(
SELECT member::regrole,
roleid::regrole AS role,
member::regrole || ' -> ' || roleid::regrole AS path
FROM pg_auth_members AS m
WHERE roleid > 16384
UNION ALL
SELECT x.member::regrole,
m.roleid::regrole,
x.path || ' -> ' || m.roleid::regrole
FROM pg_auth_members AS m
JOIN x ON m.member = x.role
)
SELECT member, role, path
FROM x
ORDER BY member::text, role::text;
member | role | path
--------+------+------------------
a | c | a -> c
a | d | a -> c -> d
a | e | a -> c -> e
a | f | a -> c -> d -> f
c | d | c -> d
c | e | c -> e
c | f | c -> d -> f
d | f | d -> f
(8 rows)
PostgreSQL中文社区欢迎广大技术人员投稿
投稿邮箱:press@postgres.cn