第5章の動作確認
5.2 ユーザ管理
以下を確認します。
- ユーザの作成
- 権限の付与と取り消し
ユーザの作成
createuserコマンドとCREATE ROLE文で新しいユーザを作成します。
[postgres@host1 ~]$ createuser -d -P sato
新しいロールのためのパスワード: ※パスワードを入力
もう一度入力してください: ※パスワードを再入力
[postgres@host1 ~]$ createuser -g sato suzuki
[postgres@host1 ~]$ psql ossdb
psql (13.14)
"help"でヘルプを表示します。
ossdb=# CREATE ROLE takahashi WITH LOGIN PASSWORD 'secret';
CREATE ROLE
ossdb=# \du
ロール一覧
ロール名 | 属性 | 所属グループ
-----------+--------------------------------------------------------------------------+-------------
-
postgres | スーパユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
sato | DB作成可 | {}
suzuki | | {sato}
takahashi | | {}
ossdb=#
createuserコマンドで、satoユーザとsuzukiユーザを新たに作成しています。satoユーザはデータベース作成可能で、suzukiユーザはsatoユーザ(グループ)のメンバーになっています。次にpsqlコマンドでossdbデータベースに接続して、CREATE ROLE文でtakahashiユーザを作成しています。作成したユーザは、psqlの\duサブコマンドで確認できます。
権限の付与と取り消し
上記で作成したsatoユーザに対するprod表の権限の付与と取り消しを行います。
ossdb=# GRANT SELECT ON prod TO sato;
GRANT
ossdb=# SET ROLE sato;
SET
ossdb=> SELECT CURRENT_USER, SESSION_USER;
current_user | session_user
--------------+--------------
sato | postgres
(1 行)
ossdb=> SELECT * FROM prod WHERE prod_id = 1;
prod_id | prod_name | price
---------+-----------+-------
1 | みかん | 52
(1 行)
ossdb=> SET ROLE suzuki;
SET
ossdb=> SELECT CURRENT_USER, SESSION_USER;
current_user | session_user
--------------+--------------
suzuki | postgres
(1 行)
ossdb=> SELECT * FROM prod WHERE prod_id = 1;
prod_id | prod_name | price
---------+-----------+-------
1 | みかん | 52
(1 行)
ossdb=> SET ROLE takahashi;
SET
ossdb=> SELECT CURRENT_USER, SESSION_USER;
current_user | session_user
--------------+--------------
takahashi | postgres
(1 行)
ossdb=> SELECT * FROM prod WHERE prod_id = 1; --エラー
ERROR: テーブル prod へのアクセスが拒否されました
ossdb=> RESET ROLE;
RESET
ossdb=# REVOKE SELECT ON prod FROM sato;
REVOKE
ossdb=# SET ROLE suzuki;
SET
ossdb=> SELECT * FROM prod WHERE prod_id = 1; --エラー
ERROR: テーブル prod へのアクセスが拒否されました
ossdb=> RESET ROLE;
RESET
ossdb=# DROP ROLE takahashi;
DROP ROLE
ossdb=# \q
[postgres@host1 ~]$ dropuser suzuki
[postgres@host1 ~]$
GRANT文でprod表に対するSELECT権限をsatoユーザに付与します。次にSET ROLE文でsatoユーザでログインします。SELECT文で現在のユーザ(CURRENT_USER) がsatoになっていることを確認した後、実際にprod表を検索してみます。
続いてsatoのメンバーであるsuzukiユーザはprod表を検索できること、takahashiユーザは検索できないことを確認しています。次にREVOKE文でsatoユーザの権限を取り消すと、suzukiユーザもprod表を検索できなくなります。最後にDROP ROLE文とdropuserコマンドで作成したtakahashiユーザとsuzukiユーザを削除します。