このセクションでは、PostgreSQLのロール(ユーザー)の基本操作について紹介します。PostgreSQL は、ロールという概念を使用してデータベース全体のアクセス権限を管理しています。
postgres ユーザーでデータベースに接続します。
[root@db-1 ~]# sudo -u postgres psql -U postgres could not change directory to "/root": Permission denied psql (11.1) Type "help" for help. postgres=#
ロール(ユーザー)の作成
ロールは作成します。ここでは、ロールのパスワードは pguser で pguser というロールを作成しています。
postgres=# create role pguser login encrypted password 'pguser'; CREATE ROLE postgres=#
ロール(ユーザー)のパスワード変更
ロールのパスワードは変更します。ここでは、pguser のロールのパスワードを pguser1 として変更しています。
postgres=# alter role pguser password 'pguser1'; ALTER ROLE postgres=#
ロール(ユーザー)の確認
現在存在するロールを確認します。
postgres=# select rolname from pg_roles; rolname --------------------------- postgres pg_monitor pg_read_all_settings pg_read_all_stats pg_stat_scan_tables pg_read_server_files pg_write_server_files pg_execute_server_program pg_signal_backend (9 rows) postgres=#
以下コマンドを実行すると、ロールの詳細を確認できます。
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+------- ---- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} postgres=#
以下コマンドを実行すると、ロールの詳細とパスワード情報を確認できます。ただし、パスワードは暗号化されている場合には読み取ることができません。
postgres=# select * from pg_authid; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | rolconnlimit | rolpassword | rolvaliduntil ---------------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+--------------+-------------------------------------+--------------- postgres | t | t | t | t | t | t | t | -1 | | pg_monitor | f | t | f | f | f | f | f | -1 | | pg_read_all_settings | f | t | f | f | f | f | f | -1 | | pg_read_all_stats | f | t | f | f | f | f | f | -1 | | pg_stat_scan_tables | f | t | f | f | f | f | f | -1 | | pg_read_server_files | f | t | f | f | f | f | f | -1 | | pg_write_server_files | f | t | f | f | f | f | f | -1 | | pg_execute_server_program | f | t | f | f | f | f | f | -1 | | pg_signal_backend | f | t | f | f | f | f | f | -1 | | pguser | f | t | f | f | t | f | f | -1 | md5e37525e5632540767d3611d0f153913b | pguser2 | f | t | f | f | t | f | f | -1 | md59083e2443589bb7ddb4dd57a945919be | pguser3 | f | t | f | f | t | f | f | -1 | md52ba5e0ae8780ff15af2abfb3cc84d3d9 | (12 rows) postgres=#
ロール(ユーザー)の削除
ロールを削除します。ここでは、 pguser3 のロールを削除しています。
postgres=# DROP USER pguser3; DROP ROLE postgres=#
ロール(ユーザー)の権限変更
ロール(ユーザー)に権限を付与します。ここでは、Superuser の権限を付与しています。
postgres=# ALTER ROLE pguser WITH Superuser; ALTER ROLE postgres=#
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+------- ---- pguser | Superuser, Create role, Create DB, Replication, Bypass RLS | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} postgres=#
ロールに付与した権限を削除する場合には、権限にNo を付けて変更すると権限を削除できます。ここでは、NoSuperuser として Superuser の権限を削除しています。
postgres=# ALTER ROLE pguser WITH NoSuperuser; ALTER ROLE postgres=#
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+------- ---- pguser | Create role, Create DB, Replication, Bypass RLS | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} postgres=#
コマンドヘルプ表示
ALTER ROLE コマンドのヘルプを表示します。
postgres=# \h ALTER ROLE
Command: ALTER ROLE
Description: change a database role
Syntax:
ALTER ROLE role_specification [ WITH ] option [ ... ]
where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
ALTER ROLE name RENAME TO new_name
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET config
uration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET config
uration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET conf
iguration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL
where role_specification can be:
role_name
| CURRENT_USER
| SESSION_USER
postgres=#