シチュエーション
- 何も権限持っていない
to-reference-user
がいる - テーブル作成権限持っている
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さん見えてしまった