見出し画像

手を動かすPostgreSQL(6)-ユーザーとロール-

前回のあらすじ

前回はpostgresql.confの設定値(GUCパラメータ)の閲覧の方法について説明しました。

今回は設定の方法について説明しようと思ったのですが、スーパーユーザが項目にあるのを思い出したので、先にユーザとかロールとかの説明をしておこうと思います。

PostgreSQLのユーザとロール

そもそも、データベースのユーザとロールというのはPostgreSQLにおいては本質的に同じものです。

ossdb=# \du

でユーザ一覧を確認してみましょう。

                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 Watary    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres  |                                                            | {}

このように、ユーザというのは本質的にAttributes(属性)の集合であることがわかります。では、ユーザとロールは何が違うのでしょうか。

ここに2つのユーザとロールを追加します。

ossdb=# CREATE USER user1;
CREATE ROLE
ossdb=# CREATE ROLE role1;
CREATE ROLE

両方ともCREATE ROLEとなっているのは置いておいて、とりあえずもう一度ユーザ一覧を確認してみます。

ossdb=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 Watary    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres  |                                                            | {}
 role1     | Cannot login                                               | {}
 user1     |                                                            | {}

こんな感じで2つとも表示されていますが、role1の方には「Cannot Login」と書かれているのが分かります。
では、このrole1に「Login」属性を付与してみましょう。こういった属性の付与はGRANTコマンドではなくALTER ROLEコマンドで行います。

ossdb=# ALTER ROLE role1 LOGIN;
ALTER ROLE
ossdb=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 Watary    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres  |                                                            | {}
 role1     |                                                            | {}
 user1     |                                                            | {}

user1と同様の表示になりました。
逆に、今度はuser1からLOGIN属性を奪ってみましょう。上と同様に、REVOKEコマンドではなくNOLOGIN属性を付与するという扱いになります。

ossdb=# ALTER ROLE user1 NOLOGIN;
ALTER ROLE
ossdb=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 Watary    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres  |                                                            | {}
 role1     |                                                            | {}
 user1     | Cannot login                                               | {}

最初のrole1と同じ状態になりました。ここから分かるように、ユーザには「Login」属性が最初からついており、ロールにはついていない、というだけの話です。

ということで、role1にスーパーユーザ権限を付与することでスーパーユーザとして運用できるようにしておきましょう。ついでにuser1もLOGINを付け直しておきます。

ossdb=# ALTER ROLE role1 SUPERUSER;
ALTER ROLE
ossdb=# ALTER ROLE user1 LOGIN;
ALTER ROLE

他にも属性は色々とありますが、スーパーユーザはこの辺の属性全てを持つ最強のロールです。故になんでも出来すぎてしまうので、通常の運用では所属させるユーザをある程度考える必要があります。

とりあえずこれでパラメータ変更の準備は整いました。
次回こそGUCパラメータを変更していきたいと思います。


宣伝

OSS-DB Goldの認定教材をリリースしました。
2023年2月時点で唯一のVer.3.0対応の教材です。
受験を検討されている方はぜひご検討の程をお願い致します。


次回の記事はこちら

この記事が気に入ったらサポートをしてみませんか?