Zunächst müssen Sie eine Verbindung zur Datenbank herstellen können, um Abfragen ausführen zu können. Dies kann erreicht werden durch
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;
GRANT CONNECT
ON DATABASE database_name
TO user_name;
Das REVOKE
ist nötig weil
Das Schlüsselwort PUBLIC gibt an, dass die Berechtigungen für alle Rollen erteilt werden sollen, einschließlich der Rollen, die später erstellt werden. PUBLIC kann als implizit definierte Gruppe betrachtet werden, die immer alle Rollen enthält. Jeder bestimmten Rolle werden die Summe der direkt zugewiesenen Berechtigungen, der Berechtigungen für jede Rolle, der sie gegenwärtig angehört, und der PUBLIC zugewiesenen Berechtigungen zugewiesen.
Wenn Sie Ihren Benutzer wirklich auf DML-Anweisungen beschränken möchten, müssen Sie ein wenig mehr tun:
REVOKE ALL
ON ALL TABLES IN SCHEMA public
FROM PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public
TO user_name;
Hierbei wird davon ausgegangen, dass Sie nur ein Schema haben (das standardmäßig den Namen "public" trägt).
Wie Jack Douglas betonte, gibt das Obige nur die Privilegien für die bereits existierenden Tische. Um dasselbe für zukünftige Tabellen zu erreichen, müssen Sie Standardberechtigungen definieren :
ALTER DEFAULT PRIVILEGES
FOR ROLE some_role -- Alternatively "FOR USER"
IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;
Hier some_role
ist eine Rolle, die die Tabellen erstellt, während user_name
diejenige, die die Berechtigungen erhält. Um dies zu definieren, müssen Sie als some_role
Mitglied angemeldet sein .
Und schließlich müssen Sie dasselbe für die Sequenzen tun (danke an PlaidFan für den Hinweis) - hier ist es das USAGE
Privileg, das Sie brauchen.
FOR some_role
war der Schlüsselteil, den ich vermisst habe, damit es für meine später erstellten Tabellen funktioniert. Aber ich musste nicht eingeloggt seinsome_role
, es funktionierte auch, wenn ich die Abfrage als Standardadministrator ausführtepostgres
.Angenommen, Sie möchten ihnen alle Berechtigungen erteilen - gehen Sie wie folgt vor:
Wo
dbname
ist der Name Ihrer Datenbank unddbuser
ist der Name des Benutzers.quelle
CREATE, CONNECT, TEMPORARY
. Keine Berechtigungen für Tabellen.GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dbuser;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dbuser;
Das Gewähren aller Berechtigungen für alle Tabellen in der Datenbank erfolgt mit
quelle
Es kann sein, dass ich hier etwas falsch gemacht habe, da ich für PostgreSQL sehr neu bin. Dies löste jedoch nur den ersten Teil des Problems für mich - das Festlegen der Berechtigungen für alle vorhandenen Tabellen.
Damit die Berechtigungen für meinen Benutzer für neue Tabellen, die erstellt werden, korrekt festgelegt werden, muss ich die Standardberechtigungen für den Benutzer festlegen:
quelle
quelle