読者です 読者をやめる 読者になる 読者になる

条件付きUPDATEと{select}権限

OSS/Linux

SE-PostgreSQLで以下のようなUPDATE構文を実行する場合、

UPDATE tbl_a SET x=10, y='aaa' WHERE z = true;
以下の権限が必要になる。
テーブル tbl_a に対する table:{select update} 権限
カラム x, y に対する column:{update} 権限
カラム z に対する column:{select} 権限
ここでupdateだけでなくselect権限の評価が必要なのは、WHERE句で tbl_a テーブルの z カラムを参照しているため。

設計としては真っ当なのだが、運用で若干面倒なことになる。
なぜかというと、条件付きUPDATEでselect権限が要求されるために、コンテンツを見せたくないテーブルに対してもselect権限を付与しなければならない。
これは、通常のSELECTと条件付きUPDATEで利用するパーミッションが分離されていないことに起因する。しかし、SELECTでテーブルを参照する場合と、UPDATEの条件句でテーブルを参照する場合には、DBオブジェクトのコンテンツをクライアントに返却するか否かという点で大きな違いがある。

そこで、DBオブジェクトのコンテンツをクライアントに返却するタイプの参照を、別のパーミッションとして分離することを検討中。