PostgreSQL selectのみ実行できるユーザーを作成する

PostgreSQL selectのみ実行できるユーザーを作成する

PostgreSQLで、selectのみ実行できるユーザーを作成する手順を記述してます。「pg_read_all_data」という定義済みのロールを付与してあげることだけで可能です。実行結果はpgadmin上で確認してます。

環境

  • OS CentOS Stream release 9
  • PostgreSQL 15.1
  • pgadmin4 6.16

手順

「select」のみ実行できるユーザーを作成するには、「pg_read_all_data」という定義済みのロールを使用します。

ここでは「sample」というDBに、実際に「sampleuser」という「select」のみ実行できるユーザーを作成してみます。

sample=# CREATE ROLE sampleuser WITH LOGIN PASSWORD 'your pwd';
CREATE ROLE

sample=# GRANT pg_read_all_data TO sampleuser;
GRANT ROLE

作成した「sampleuser」でログインして確認してみます。「select」は実行でき「update」は実行できないことが確認できます。

$ psql -h localhost sample -Usampleuser

sample=> SELECT id, name, age FROM public.testtbl;
 id | name | age 
----+------+-----
  1 | 111  |  10
  2 | 222  |  20
  3 | 333  |  30
(3 行)

sample=> UPDATE testtbl SET name = '000';
ERROR:  テーブル testtbl へのアクセスが拒否されました

権限は「\du」で確認することができます。

sample-> \du
                                                   ロール一覧
  ロール名  |                                     属性                                     |    所属グループ    
------------+------------------------------------------------------------------------------+--------------------
 pgadmin    | スーパーユーザー, ロール作成可, DB作成可                                     | {}
 postgres   | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
 sampleuser |                                                                              | {pg_read_all_data}

権限削除

また、権限を削除する場合は「REVOKE」を使用します。

sample=# REVOKE pg_read_all_data FROM sampleuser;
REVOKE ROLE