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

Jun Kitamura kitamura @ zoozee.jp
2003年 6月 23日 (月) 04:35:56 JST


北村です。

> 片岡です。
(snip)
>   デフォルトではPUBLICに対しても権限が与えられています(よって以前と互換あ
> り)。
(snip)
> > -- 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;
> 
>   なので、PUBLICからREBOKEする必要があります。
> 
> 	revoke all on function func1() from public;
> 	revoke all on function func2() from public;

おぉ・・・!
ありがとうございます。確認しました。
public に権限が付いてたんですね。気づきませんでした。

psql の \df や \df+ では、権限出ませんよね・・・。
関数の権限というものが未実装なのだと思い込んでしまいました。

システムカタログを覗いたら、ありましたね・・・。汗
全く気づいてませんでした。

どうもありがとうございました。


-- ここからサマリ
[Q] ユーザー定義関数で、作成者(所有者)以外が関数を実行できて
しまう(スーパユーザは除く)
[A] デフォルトで public に対して実行権限が付いているので、
public に対して REVOKE する必要あり。
 →[pgsql-jp:30226] Hiroki Kataoka <kataoka @ interwiz.jp>

権限を確認する方法
select proname,proacl from pg_proc where proname = '関数名';

例
revoke all on function func1() from public;
select proname,proacl from pg_proc where proname like 'func%';

 proname |         proacl
---------+------------------------
 func1   | {=,user_1=X}
 func2   | {=X,user_1=X}

func1 の最初の = は、public に対して権限が無いことを示します。
func2 は、=X なので pulibc に対して EXECUTE 権限があることを
示す。

grant all on function func1() to user_2;
select proname,proacl from pg_proc where proname = 'func1';

 func1   | {=,user_1=X,user_2=X}

これで、user_1 と user_2 だけがこの関数(func1())を実行できる。
-- ここまで





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