私は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をもう一度実行すると、同じ結果が得られます。デフォルトの権限は変更されていません。
ここで何が欠けていますか?
よろしくお願いします!
@ 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:=#