haiju's 開発メモ

開発に必要な情報を自分用にメモ

PostgreSQL 10.10 (ver9.0以降)で参照権限しか持たないユーザーを作成するには

PostgreSQLはインストールの時からエンコーディングロケール等の

文字コード周りには厳しいDatabaseという印象がある。

MariaDBMySQLを使う仕事が多かったのもあり、PostgreSQL

詳しくないので仕事で使う、この機会に勉強してみようということで

少しずつ備忘録をまとめてみる(Φω|

[手順]

1. 参照権限のみ付与するユーザを作成。

(ex)テスト用ユーザ作成

CREATE ROLE Read_Only_User WITH LOGIN PASSWORD 'Test1234'

NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';

2. 1に対して権限を参照権限のみ付与

(ex)SCHEMAの全てのテーブルとシーケンスに対して付与。

GRANT CONNECT ON DATABASE target_database TO Read_Only_User;

GRANT USAGE ON SCHEMA public TO Read_Only_User;

GRANT SELECT ON ALL TABLES IN SCHEMA public to Read_Only_User;

GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO Read_Only_User;

psqlで実際に叩く場合(Read_Only_Userのところは実際のユーザ名)

target_database=# GRANT CONNECT ON DATABASE target_database TO Read_Only_User;

target_database=# GRANT USAGE ON SCHEMA public to Read_Only_User;

target_database=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO Read_Only_User;

※将来のオブジェクトに対し修正する場合

target_database=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO Read_Only_User;

ALTER DEFAULT PRIVILEGES

※実行権限を与える場合は以下。

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO Read_Only_User;

[参考サイト]

stackoverflow.com

www.dbrnd.com