Open5

postgresql: ロールへのDML権限付与がうまくいかない

dallPdallP

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO rolename;

すると

WARNING: no privileges were granted for "tablename"

がいっぱい。QueryはOKになってるしうまくいったのかな?と思ったけど、やはりテーブルを見ることができない模様。

dallPdallP

調べるとno privileges were granted...は、既にその権限が付与されている場合にも表示される模様。
しかし今回は実際に表示されないのでその線は却下

dallPdallP

試しにALL TABLEではなく個別テーブルに権限付与してみるも失敗

GRANT SELECT, INSERT, UPDATE, DELETE ON specific_table TO rolename;

dallPdallP

今自分が使っているロールが権限付与する権限を持っていない説

SELECT
schemaname,
tablename,
tableowner,
has_table_privilege(current_user, schemaname||'.'||tablename, 'SELECT WITH GRANT OPTION') as can_grant
FROM pg_tables
WHERE schemaname = 'public';

can_grantがFALSE!
これだーーー

dallPdallP

デフォルトだと、そのテーブルを作ったロールかスーパーユーザーじゃないとGRANTができない模様。

今回はテーブル作成ロールに切り替えることで事なきをえたのでした。