ロールがどのロールにメンバとして属しているのかの一覧を取得する

広告
eyecatch

PostgreSQL ではロールのメンバ資格を別のロールに付与することができます。ここではロールの一覧とロールがメンバとして属しているロールの一覧を表示する方法について解説します。

¥duコマンドを使用する

最初に psql のメタコマンドを使ってロールの一覧を取得する方法です。次のように実行してください。

¥du

¥duコマンドを使用する(1)

改行されているので見にくいのですが、次のように表示されています。

ロール名属性所属グループ
adminログインできません{}
inu {admin}
neko継承なし{admin}
postgresスーパーユーザ, ロール作成可, DB作成可,レプリケーション可, RLS のバイパス{}

所属グループのところに現在ロールがメンバとなっているロールが表示されています。このように ¥du コマンドを実行することで、ロールがメンバとして属しているロールを取得することができます。

メンバ資格の一覧を取得する

ロールに付与されたメンバ資格の一覧はシステムカタログの一つである pg_auth_members から取得することができます。 pg_auth_members には次のようなカラムがあります。

名前参照先説明
roleidoidpg_authid.oidメンバを持っているロールのID
memberoidpg_authid.oidroleidのメンバであるロールのID
grantoroidpg_authid.oidこのメンバシップを与えたロールのID
admin_optionbool もしmemberがroleidのメンバシップを他に与えることができる場合は真

それでは pg_auth_members からデータを取得してみます。次のように実行してください。

select * from pg_auth_members;

メンバ資格の一覧を取得する(1)

roleid がメンバ資格を与えたロールの ID 、 member がメンバ資格を与えられたロールの ID 、 grantor がメンバ資格を与えたコマンドを実行したロールの ID、 admin_option はメンバ資格を与えられた時に WITH ADMIN OPTION が付いていれば TRUE となります。

それぞれのロールが ID で保存されているので、ロール名を格納している pg_authid からデータを取得して表示するように変更します。(いい SQL 文が思いつかなかったので少し見にくいものになっています)。

select
(select pg_authid.rolname as role_name from pg_authid where pg_authid.oid = pg_auth_members.roleid),
(select pg_authid.rolname as member_name from pg_authid where pg_authid.oid = pg_auth_members.member),
(select pg_authid.rolname as grantor_name from pg_authid where pg_authid.oid = pg_auth_members.grantor),
admin_option
from pg_auth_members;

メンバ資格の一覧を取得する(2)

admin ロールにメンバ資格を与えられているロールが 2 つあり、 kuma ロールは postgres ロールによってメンバ資格を与えられており、 cat ロールは kuma ロールによってメンバ資格を与えられています。また kuma ロールは WITH ADMIN OPTION 付きです。

-- --

ロールの一覧とロールがメンバとして属しているロールの一覧を表示する方法について解説しました。

PostgreSQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。