web-dev-qa-db-ja.com

postgresqlユーザーからデフォルトの権限を取り消すことはできません

私はpsqlツールを使用しています:

コマンド:

my_db=# \ddp

結果:

                         Default access privileges
     Owner      | Schema |   Type   |          Access privileges
----------------+--------+----------+--------------------------------------
 postgres       | kpi    | function | kpi_updater=X/postgres              +
                |        |          | intranet2=X/postgres
 postgres       | kpi    | sequence | kpi_updater=rwU/postgres            +
                |        |          | intranet2=rwU/postgres
 postgres       | kpi    | table    | kpi_updater=arwdDxt/postgres        +
                |        |          | intranet2=arwdDxt/postgres
 postgres       | kpi    | type     | kpi_updater=U/postgres              +
                |        |          | intranet2=U/postgres

次に、エラーなしで戻る次のコマンドを使用します。

ALTER DEFAULT PRIVILEGES IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2;

\ ddpをもう一度実行すると、同じ結果が得られます。デフォルトの権限は変更されていません。

ここで何が欠けていますか?

よろしくお願いします!

7
personne3000

@ personne3000が以下のコメントで指摘したように、\ddpコマンドではなく\dpコマンドに関連する質問に回答するように編集されました。

あなたはおそらくALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2;を使いたいでしょう

これは、postgresがスキーマ内の関数に対する実行のデフォルト権限kpiを付与されたユーザーであり、intranet2の権限に示されているように、それをintranet2=X/postgresに付与しているためです。

何が起こっているのかを示すために、小さな例を作成しました。

pgsql@[local]:5432:pgsql:=# CREATE ROLE bob;
CREATE ROLE
Time: 0.526 ms
pgsql@[local]:5432:pgsql:=# CREATE SCHEMA we_like_bob;
CREATE SCHEMA
Time: 0.608 ms

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob GRANT EXECUTE ON FUNCTIONS TO pgsql;
ALTER DEFAULT PRIVILEGES
Time: 1.480 ms
pgsql@[local]:5432:pgsql:=# \ddp
             Default access privileges
 Owner |   Schema    |   Type   | Access privileges 
-------+-------------+----------+-------------------
 bob   | we_like_bob | function | pgsql=X/bob
(1 row)

ユーザーpgsqlには、bobによって付与された実行特権Xがあります。

Pgsql(スーパーユーザー)として、ロールpgsqlの実行権限を取り消そうとします。

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE pgsql IN SCHEMA we_like_bob REVOKE EXECUTE ON FUNCTIONS FROM pgsql;
ALTER DEFAULT PRIVILEGES
Time: 0.176 ms
pgsql@[local]:5432:pgsql:=# \ddp
             Default access privileges
 Owner |   Schema    |   Type   | Access privileges 
-------+-------------+----------+-------------------
 bob   | we_like_bob | function | pgsql=X/bob
(1 row)

このコマンドは、関数pgsqlに関数の実行を許可するbobロールのデフォルトの機能を削除していないため機能しませんでした。pgsqlから関数の実行を取り消すpgsqlロールの機能を削除しています。

これを変更してロールpgsqlのbobロールから実行の権限を削除すると、機能します。

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob REVOKE EXECUTE ON FUNCTIONS FROM pgsql;
ALTER DEFAULT PRIVILEGES
Time: 0.644 ms
pgsql@[local]:5432:pgsql:=# \ddp
         Default access privileges
 Owner | Schema | Type | Access privileges 
-------+--------+------+-------------------
(0 rows)

pgsql@[local]:5432:pgsql:=#
6
Kassandry