約束の地

キャロ組

PostgreSQL では読み取り(リードオンリー)のロールは設定できないのか(未解決)

注意

PostgreSQL 初心者が書いてます。

やりたいこと

  • 誤ってテーブルやデータを消してしまわないように、全データベースに対して読み取り専用のロールを作りたい

いろいろやってわかったこと

  • どうやらそういうロールを一発で設定することはできないらしい
  • データベースのスキーマのテーブルごとには GRANT で設定ができる
    • ただし新しくテーブルが作られた場合は都度 GRANT を実行しなければいけないっぽい

具体的なコマンド例

  • 例えば以下のような GRANT を発行する。これは適用したい各データベース全てにプロンプトを移して行わなければいけない
foobar_database=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO i_am_readonly_role;

  • 何らかの原因*1でロールに権限が付いた場合、それを上書きするためには一度 REVOKE してから GRANT し直す必要がある*2

*1:例えばそのロールでテーブルを作成する、など

*2:微妙にハマりました……

Powered by はてなブログ