質問: ### 実現したいこと PostgreSQLにおいて、システムカタログのpg_procを参照できないように、特定ユーザをREVOKEしたいです。 PosgreSQLのバージョン:9.4.4 ### 理由 pgcryptoを用いて、対象のカラムを暗号化・復号することになりました。 復号は以下のようなイメージです。 ``` SELECT id, pgp_sym_decrypt(name,'pass123') FROM test; ``` しかしこの例ですと、暗号化・復号に用いるパスワード"pass123"がSQLに直接表示されてしまいます。 よって、暗号化時のパスワードを関数に定義し、その関数を用いて復号します。 ``` CREATE FUNCTION get_password() RETURNS TEXT AS $$ SELECT CAST('pass123' AS TEXT); $$ LANGUAGE SQL; SELECT id, pgp_sym_decrypt(name,get_password()) FROM test; ``` ただ、PostgreSQLでは関数定義をpg_procシステムビュー経由で参照できてしまうため、特定ユーザの参照権限をREVOKEしておきたいです。 色々試してみたのですが、どうも上手くいかず、またPostgreSQLのメーリスを見ると、「この操作は出来ない」とする回答もありました。 しかし、公式ドキュメントからその旨の記述が見つけられず、本当に出来ないのかどうか分かりません。 ・pg_procをREVOKEする方法 ・REVOKE出来ないのであれば、その旨が書いてあるドキュメント についてご教示頂きたいです。 ### 試したこと REVOKEするために、以下の方法は試してみました。 エラーにはなりませんでしたが、REVOKEされていませんでした。 ``` REVOKE SELECT ON TABLE pg_proc FROM test_user; REVOKE ALL PRIVILEGES ON TABLE pg_proc FROM test_user; ```
回答: PostgreSQLのユーザ権限周りは熟知してませんので、間違ってたらすみません。 こちらのQAが参考になるかもしれません。 ベストアンサー内のコメントのやり取りに注目して欲しいのですが、 ユーザ単位のREVOKEだけでなく、 **publicアクセス権限からも権限を剥奪する必要**があるそうです。 publicからpg_procのSELECT権限をREVOKEすることが可能でしたら、 試してみてはいかがでしょうか?