PostgreSQLの権限まわり
権限まわりは触る機会少ないし、ドキュメントが読みづらい。勉強してもすぐ忘れる。
久しぶりにこの辺り触れたのでサクッと重要な点のみメモしておく。
- PostgreSQL用語で、データベース、テーブル、カラム、ビュー、シーケンス、スキーマ、関数等全てを
データベースオブジェクトと呼ぶ。 -
データベースオブジェクトのownerはその対象に全権限を持つ。また、作成者はデフォルトでownerとなる。例えば、CREATE TABLEしたユーザにそのtableの全権限がデフォルトで付与される。 - 対象の
データベースオブジェクトのGRANT/REVOKEできるのは、ownerかスーパーユーザ権限ロールのみ。 - 権限の種類と
データベースオブジェクトの種類の対応表は表にある。- データベースのownerにはロクな権限はないことに注意。temporary tableを作成したり、schema作成したり。tableに対する権限はゼロ であることに注意。
-
GRANT admins TO joe;のように権限を継承することができる。 -
\duにて権限を確認することが多いと思うが、明示的にgrantしていない権限は表示されない。スーパーユーザ権限ロール、ownerのロール、継承されたロールは表示されない。 - ^を表示させるには、has_table_privilege関数を使って頑張る必要がある。
- 今後作成されるテーブル等にも権限が付与されるようにしたければ、ALTER DEFAULT PRIVILEGESを使う。