it-swarm.com.de

Wie erteile ich einer Rolle in PostgreSQL Drop-Table- / Funktionsberechtigungen?

Ich möchte drop Berechtigungen für alle Tabellen und Funktionen (nicht nur für diejenigen, die dem Benutzer gehören) in einem bestimmten Schema einer bestimmten Datenbank einer bestimmten Rolle gewähren. Jedoch, GRANT ALL PRIVILEGES ist nicht genug und ich habe nicht herausgefunden, wie ich ohne die Rolle eines Superusers auskommen soll - Superuser hat Rechte über andere Datenbanken auf demselben Server, was ich nicht will. Ich hätte nichts gegen Superuser-Berechtigungen, die auf eine bestimmte Datenbank beschränkt sind, aber ich bin mir nicht sicher, wie ich das machen soll.

Mein Code:

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;

administrator ist die Gruppe von myDB Datenbankadministratoren, _administrator ist die mächtigste Rolle, unter der sich meine Client-App anmelden kann.

Was habe ich vermisst oder falsch gemacht?

9
Pavel V.

Nur der Eigentümer (und Superuser) können Objekte löschen. Pro Dokumentation :

Das Recht, ein Objekt fallen zu lassen oder seine Definition in irgendeiner Weise zu ändern, wird nicht als gewährbares Privileg behandelt. Es ist dem Eigentümer inhärent und kann nicht gewährt oder widerrufen werden. (Ein ähnlicher Effekt kann jedoch erzielt werden, indem die Mitgliedschaft in der Rolle, der das Objekt gehört, gewährt oder widerrufen wird (siehe unten).) Der Eigentümer verfügt implizit auch über alle Gewährungsoptionen für das Objekt.

Machen Sie also administrator own zu solchen Objekten, die Benutzer löschen können sollten.

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

Und Sie haben daran gedacht, tatsächlich eine Gruppenmitgliedschaft zu gewähren, oder?

GRANT administrator TO _administrator;
10