PostgreSQL 10.10 (ver9.0以降)で参照権限しか持たないユーザーを作成するには
PostgreSQLはインストールの時からエンコーディングやロケール等の
文字コード周りには厳しいDatabaseという印象がある。
MariaDBかMySQLを使う仕事が多かったのもあり、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;
[参考サイト]