[pgsql-jp: 30225] 関数の実行権限(7.3)

Jun Kitamura kitamura @ zoozee.jp
2003年 6月 23日 (月) 01:18:20 JST


北村です。

PostgreSQL 7.3.2
マニュアル(日本語版)にある、関数の実行権限というのは未実装な
のでしょうか?
http://www.postgresql.jp/document/pg732doc/reference/sql-grant.html

下記にあるように、user_1 の作ったユーザー定義関数が、user_2 
で使えてしまいます(sql,plpgsql)。REVOKE しても使えてしまいま
した。

最新バージョンでは利用できるのかと、7.3.3 HISTORY を覗いてみ
ましたが、それらしい事は発見できませんでした。また、325行目
には、
   Add new object permission bits EXECUTE and USAGE (Tom)
と書いてあります。この英文、「ビットを設けた『だけ』」とい
う意味にとれないこともない。マニュアル先行で予定機能を含めて
記載されている可能性もあるので、未実装なのは構わないのですが、
どこかに、未実装です、ということが明記してあったりするかもし
れず、どなたか情報をお持ちでないかな・・・と。
コンパイル時に何かしなければ、とか、設定が必要だ、という事で
もなさそうですし・・。

あるいは、「関数」という言葉の意味が違うのかとも思いましたが、
CREATE FUNCITON の項にも作成者(オーナー)が権限をもつ、とあっ
たので、ユーザー定義関数も関数という言葉に含まれる、と解釈し
ています(ここが間違っているかもしれない)。

以下、実行した内容です(かなり端折ってますが、コピー&ペース
トで実行できるよう編集しあります。検証していただけると、私の
環境だけの現象でないと確認できて安心できます(笑))

-- ここから(スーパユーザで実行)
select version();
-- PostgreSQL 7.3.2 on i686-pc-linux-gnu, compiled by GCC 2.96

create user user_1;
create user user_2;
\c - user_1;
-- You are now connected as new user user_1.
create or replace function func1() returns int4 as 'select 1;' language 'sql';
create or replace function func2() returns int4 as 'BEGIN RETURN 2; END;' language 'plpgsql';
\df+ func*
-- List of functions
-- Name  | Argument data types | Owner  | Language |
-- ------+---------------------+--------+----------+
-- func1 |                     | user_1 | sql      |
-- func2 |                     | user_1 | plpgsql  |

-- 実行
select func1();
-- (1 row)
select func2();
-- (1 row)
-- オーナーなので実行可能
-- ユーザー切り替え
\c - user_2
-- You are now connected as new user user_2.
select func1();
-- (1 row)
select func2();
-- (1 row)
-- オーナーでないのに実行できてしまう

-- REVOKEする
\c - user_1
-- You are now connected as new user user_1.
revoke all on function func1() from user_2;
revoke all on function func2() from user_2;
-- REVOKE
\c - user_2
-- You are now connected as new user user_2.
select func1();
-- (1 row)
select func2();
-- (1 row)
-- 結局実行できてしまう
-- おわり





pgsql-jp メーリングリストの案内