PostgreSQL 権限についてです。


あるユーザに対して「ユーザ定義関数のEXECUTEは許可するが、テーブルやビューにはどんな権限も与えない」という設定をしたい場合、
ユーザ定義関数が参照するテーブルへのアクセス権限も与えないと動作しないものなのでしょうか?

的を外した質問であれば、それも含めてお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/05/20 13:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答0件)

回答はまだありません

  • id:wnagata
    http://www.postgresql.jp/document/pg732doc/reference/sql-grant.html

    実際に以下のようなユーザ定義関数を作って実験してみました。

    CREATE FUNCTION COUNT_TEST_TAB() RETURNS INTEGER AS '
    DECLARE
    ln_cntval INTEGER;
    BEGIN
    SELECT COUNT(*) INTO ln_cntval FROM test_tab;
    return ln_cntval;
    END;
    ' LANGUAGE 'plpgsql';

    test_tabへのselect権限のないユーザで実行すると、

    postgres=> select COUNT_TEST_TAB();
    ERROR: permission denied for relation test_tab
    CONTEXT: SQL statement "SELECT COUNT(*) FROM test_tab"
    PL/pgSQL function "count_test_tab" line 4 at SQL statement

    つまり関数の実行権限以外に、その関数がテーブルにアクセスしている場合には、そのテーブルへの権限が必要となります。

    grant select on test_tab to test;

    というようにselect権限を与えると、結果が返ってくるようになります。

    なお、CREATE FUNCTIONした直後にpublicに対して、その関数への実行が許可されていますので、必要に応じて、

    revoke execute on function COUNT_TEST_TAB() from public;

    とpublicから権限を剥奪しておくとよいでしょう。

  • id:kamiochiai
    kamiochiai 2007/05/13 17:20:50
    ありがとうございます。
    すみません、この回答でポイントを付けたいくらいなのですが
    どうすればいいでしょう??

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません