PostgreSQLのロールにテーブル/関数の削除権限を付与するにはどうすればよいですか?


10

drop特定のデータベースの特定のスキーマにあるすべてのテーブルと関数(ユーザーが所有するものだけでなく)に対する特権を特定のロールに付与したい。しかし、GRANT ALL PRIVILEGESそれだけでは不十分であり、スーパーユーザーにすることなしにその方法を見つけることができませんでした。スーパーユーザーは、同じサーバー上の他のデータベースに対する権限を持っています。スーパーユーザーの権限が特定のデータベースに限定されていてもかまいませんが、その方法はわかりません。

私のコード:

CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;

GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;

administratormyDBデータベース管理者のグループであり_administrator、クライアントアプリがログインできる最も強力な役割です。

私が見逃したことや間違ったことは何ですか?

回答:


11

オブジェクトをドロップできるのは、所有者(およびスーパーユーザー)だけです。ドキュメントごと:

オブジェクトを削除したり、その定義を変更したりする権利は、付与可能な特権として扱われません。それは所有者に固有であり、付与したり取り消したりすることはできません。(ただし、オブジェクトを所有するロールのメンバーシップを付与または取り消すことによって、同様の効果を得ることができます。以下を参照してください。)所有者は、オブジェクトのすべての付与オプションも暗黙的に持っています。

したがって、ユーザーがドロップできるようなオブジェクトをadministrator 自分で作成します。

ALTER FUNCTION foo() OWNER TO administrator;
ALTER TABLE foo      OWNER TO administrator;

そして、実際にグループメンバーシップを付与することを覚えていますか?

GRANT administrator TO _administrator;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.