[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 メーリングリストの案内