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

9

Ich möchte dropeiner bestimmten Rolle Berechtigungen für alle Tabellen und Funktionen (nicht nur für diejenigen, die dem Benutzer gehören) in einem bestimmten Schema einer bestimmten Datenbank gewähren . Dies reicht GRANT ALL PRIVILEGESjedoch nicht aus und ich habe nicht herausgefunden, wie ich die Rolle zum Superuser machen soll - der Superuser hat Rechte über andere Datenbanken auf demselben Server, was ich nicht möchte. 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;

administratorist die Gruppe der myDBDatenbankadministratoren, _administratorist die mächtigste Rolle, unter der sich meine Client-App anmelden kann.

Was habe ich vermisst oder falsch gemacht?

Pavel V.
quelle

Antworten:

10

Nur der Eigentümer (und die 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.

Also, stellen Sie administrator eigene solche Objekte , die Benutzer in der Lage sein sollte , fallen zu lassen.

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;
Erwin Brandstetter
quelle