happiness (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) happiness

【PostgreSQL】alter default privlideges~のドキュメントが読めなかったのでハマった

シチュエーション

PostgreSQL

  1. 何も権限持っていない to-reference-userがいる
  2. テーブル作成権限持っているtable-craeting-userがいる

to-reference-userに永続的に読み取りさせたいスキーマ(テーブル群)がある。

スキーマは、publicとかのことで、テーブルとDBの中間にある箱というイメージで良いと思います

答え

alter default privileges for role "table-creating-user" 
  in schema public
  grant select on tables to "to-reference-user";

だめな例

alter default privileges for role "to-reference-user"
  in schema public
  grant select on tables to "to-reference-user";

※ 厳密には、to-reference-userがテーブル作るようなユーザーであれば、問題ない

解説

分解してみてみよう

テーブル生成をするユーザーを指定する

権限を変更する対象がテーブル生成をするユーザーというのが盲点であった

alter default privileges for role "table-creating-user"  in schema public

SELECT権限を付与したいロールを指定する

普通のgrantと同じです。

grant select on tables to "to-reference-user";

なんでハマったか

資料が読めなかったため。

参考

下記2つ読んでもむずくてわからなかった ALTER DEFAULT PRIVILEGES

PostgreSQL ユーザーとロールの管理 | Amazon Web Services ブログ

理解の決め手となった記事

postgresql - ALTER DEFAULT PRIVILEGES - permission denied - Database Administrators Stack Exchange

というか stackexchangeってサイトだったのね。完全にoverflowさん見えてしまった