ユーザへの権限付与はユーザごとにGRANT文で割り当てる方法の他に、いくつかの権限をまとめた「ロール」を作成し、ユーザに割り当てる方法があります。
ロールの作成
1)CREATE ROLE文でロールを作成します。
1 |
dbadmin=> CREATE ROLE ロール名; |
例)test_roleを作成する場合
1 |
dbadmin=> CREATE ROLE test_role; |
2)スーパーユーザ、あるいは、オブジェクトの所有者で、作成したロールに権限を付与します。
1 |
dbadmin=> GRANT [付与する権限] ON [オブジェクト] TO [ロール]; |
例)publicスキーマのlineorderテーブルに対してSELECT権限を持つロールを作成する場合
1 |
dbadmin=> GRANT SELECT ON public.lineorder TO test_role; |
ユーザへのロールの割り当て
作成したロールを任意のユーザに割り当てます。1)GRANT文でロールを割り当てます。
1 |
dbadmin=> GRANT ロール名 to ユーザ名; |
例)kka_userにtest_roleを割り当てる場合
1 |
dbadmin=> GRANT test_role TO kka_user; |
2)割り当てたロールを該当ユーザのデフォルトのロールに設定します。
1 |
dbadmin=> ALTER USER ユーザ名 DEFAULT ROLE ロール名; |
例)kka_userのデフォルトロールにtest_roleを追加する場合
1 |
dbadmin=> ALTER USER kka_user DEFAULT ROLE test_role; |
※本設定をしない場合、ロールを割り当てられたユーザは、ログイン後に毎回ロールを有効化する作業が必要になります。
割り当てられているロールの確認
ロールを割り当てられたユーザで以下のコマンドを実行すると、自身に割り当てられている(有効な)ロールを確認できます。例)kka_userで確認した場合
1 2 3 4 5 |
kka_user=> SHOW ENABLED_ROLES; name | setting ---------------+----------------------- enabled roles | test_role, test_role2 (1 row) |
上記の例ではkka_userにはtest_role、test_role2が割り当てられている(有効になっている)ことが確認できます。
作成したロールの情報を確認する
作成したロールに割り当てられている権限等の情報を確認する場合は、以下のSQLを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
dbadmin=> SELECT dbadmin-> r.role_id, dbadmin-> r.name, dbadmin-> r.assigned_roles, dbadmin-> g.object_schema, dbadmin-> g.object_name, dbadmin-> g.object_type, dbadmin-> g.privileges_description dbadmin-> FROM roles r JOIN grants g dbadmin-> ON r.name=g.grantee dbadmin-> AND dbadmin-> r.name NOT IN ('public','dbuser','dbadmin','pseudosuperuser') dbadmin-> ; role_id | name | assigned_roles | object_schema | object_name | object_type | privileges_description -------------------+-----------+----------------+---------------+-------------+-------------+------------------------ 45035996280725724 | test_role | | public | LINEORDER | TABLE | SELECT (1 row) |
上記の例では、test_roleロールにはpublicスキーマのLINEORDERテーブルに対してのSELECT権限が付与されていることが確認できます。
[roles、grants]
列名 | 内容 |
---|---|
role_id | ロールID |
name | ロール名 |
assigned_roles | 割り当てられているロール |
object_schema | 権限が付与されたスキーマ名 |
object_name | 権限が付与されたオブジェクト名 |
object_type | 権限が適用されるオブジェクト |
privileges_description | 割り当てられている権限の詳細 |