Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

PostgreSQLでスキーマに対する全ての権限をユーザーに設定するときの注意点

概要

いわゆる、GRANTさんの話。スキーマに対する権限を付与するときの注意点です。

環境

内容

スキーマに対する全ての権限を付与しようと思って

GRANT ALL ON SCHEMA schema_name TO role_name;

としても、スキーマ内のテーブルへの権限はつかない。ので注意が必要です。

具体的に言うと、GRANTしたあとにスキーマ内のテーブルをSELECTしようとして

SELECT * FROM schema_name.table_name

ってしたら、

permission denied for relation table_name;

が発生する。悔しい。

これを回避するには

スキーマ内の全テーブルに対する権限を付与してやる必要がある。つまりは

GRANT ALL ON ALL TABLES IN SCHEMA schema_name TO role_name;

っていうこと。

んでも、これの後に追加されたテーブルに対しては権限がつかない。悔しい。

じゃあどうすればいいの?

ってなる。個人的には

GRANT schema_owner_role TO role_name;

ってな感じで、スキーマの所有者のロールを継承させることで解決している。

まとめ

権限って目に見えないから苦手。