[pgsql-jp: 30483] Re: シーケンスと権限

ISHIDA Akio iakio @ pjam.jpweb.net
2003年 7月 16日 (水) 10:25:30 JST


こんにちは。石田@苫小牧市です。

Koyama <mlac @ hintmark.com> wrote:
(2003/07/14 23:44)

> 以下の条件でテーブルとシーケンスを作成しました。
> 
> 作成者  postgres
> 
> スキーマ  sc_1
> テーブル  sc_1.tb_1
> 
> テーブル使用ユーザー  user_1
> 使用許可権限          SELECT INSERT UPDATE DELTE
> 
> シーケンス  sc_1.seq_1
> 
> 
> 最初、user_1 に、テーブル sc_1.tb_1 に対する SELECT INSERT UPDATE 
> DELTE 権限を許可したのにも関わらず、SELECT できなかったので、
> かなりあわてました。
> 

(中略)

> 
> そこで、ふと、以下の疑問を持ち投稿させて頂きました。
> 
> 疑問1:
>   テーブル(sc_1.tb_1) へ  INSERT 処理を行う際に、 
>   シーケンス(sc_1.seq_1)を使用する場合、シーケンスの利用許可を
>   どのように与えれば良いのか

http://www.postgresql.jp/document/pg732doc/reference/sql-grant.html
によると、シーケンスに対して SELECT 権限を与えると、currval() の
使用が可能になり、UPDATE 権限を与えると nextval() / setval() の
使用が可能になるそうです。

currval() / nextval() については、
http://www.postgresql.jp/document/pg732doc/user/functions-sequence.
html

なので、
grant select update on seq_1 to user_1;
のような感じではないでしょうか?

現在の権限を確認するには、
select relname, relacl from pg_class where relname = 'seq_1';
といった感じでしょうか。

> 
> 疑問2:
>   GRANT では 関数の利用権限 EXECUTE を与える事ができるが、
>   他のユーザーのスキーマ直下のテーブルを利用する場合、
>   MAX MIN などの、もともと存在する関数に対しても、全て
>   GRANT EXECUTE させなければならないのか

一般的な関数の権限は、デフォルトで ``{=X}'' つまり
public に対して EXECUTE 権限があたえられています。

=> select proname, proacl from pg_proc where proname='abs';
 proname | proacl
---------+--------
 abs     | {=X}
 abs     | {=X}
 abs     | {=X}
 abs     | {=X}
 abs     | {=X}
 abs     | {=X}
(6 rows)

また、ユーザーが作成した関数には、デフォルトでそのユーザーのみが
実行権限を持ちます。

http://www.postgresql.jp/document/pg732doc/reference/sql-grant.html
http://www.postgresql.jp/document/pg732doc/reference/sql-
createfunction.html
http://www.postgresql.jp/document/pg732doc/developer/catalog-pg-proc.
html

--
ISHIDA Akio<iakio @ pjam.jpweb.net>




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