Alter Standard-Berechtigungen für eine Rolle in der Gruppe in PostgreSQL
Erstellt habe ich zwei Gruppen-Rollen in Postgres 9.2: eine heißt admins
und der andere heißt readers
.
Die Idee ist sehr einfach: admins
erstellen von Tabellen und das readers
gelesen haben Zugriff auf diese Tabellen.
Nach Gewährung der Privilegien, um sowohl der Gruppe als auch Rollen funktioniert alles wie erwartet, für exisintg Objekte. Aber jetzt was über die neuen Objekte?
Also nach der Lektüre dieses post ich verändert die default-Berechtigungen zu gewähren SELECT
Privilegien zu readers
für jede neue Tabelle, die admins
erstellen:
ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON TABLES TO readers;
ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON SEQUENCES TO readers;
Aber anscheinend ALTER DEFAULT PRIVILEGES
wirkt sich nur auf die Rolle, aber nicht die Mitglieder der Rolle. Lassen Sie mich Ihnen zeigen.
Wenn ich mich anmelden als userX
(Mitglied admins
) und erstellen Sie eine neue Tabelle, keine Standard-Berechtigungen erteilt werden (und daher readers
keinen Zugriff auf diese Tabelle):
test=# CREATE TABLE table1 (name VARCHAR(10)); -- Creating table as userX
test=# \dp table1
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-------------------+--------------------------
public | table1 | table | |
Jedoch die Standard-Berechtigungen erteilt werden, wenn ich die Tabelle als admins
(readers
können auf diese Tabelle zugreifen):
test=# SET ROLE admins;
test=# CREATE TABLE table2 (name VARCHAR(10)); -- Creating table as admins
test=# \dp table2
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-----------------------+--------------------------
public | table2 | table | readers=r/admins +|
| | | admins=arwdDxt/admins |
Gibt es eine Möglichkeit, ändern Sie die Standard-Berechtigungen für ALLE Mitglieder einer Rolle in der Gruppe? Oder soll ich das einfach ändern Standard-Berechtigungen für jeden Benutzer?
UPDATE: In diesem PostgreSQL forum jemand fragte eine sehr ähnliche Frage und die Antwort war:
Leider kann ich nicht sehen, ein Weg, um zu erreichen, was Sie wollen, ohne die Standard-Berechtigungen für alle beteiligten.
Aber diese Frage wurde vor 2 Jahren. Gibt es jetzt eine Lösung?
- Ich habe versucht, dies zu erreichen auch, aber ich denke, dies könnte dazu führen, dass einige Art von Diamant-problem. Wenn ein Benutzer Mitglied in mehr als einer Rolle in der Gruppe, die Standard-Berechtigungen erteilt werden sollte?
- Versuchen sehr ähnliche Sache, aber auch mit SCHEMA und die ANSICHTEN, die Gewährung von SELECT-Rechte auf the_reader , für die Zukunft erstellten ANSICHT(en) dba.stackexchange.com/questions/238766/... . In der mine, ich habe gerade mit dem Benutzer (und nicht Gruppen) und ich benutze ein schema als "userspace", wo ein manager schreiben kann jede Ansicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ein Benutzer erstellt eine Tabelle, dann ist dieser user wird der Eigentümer der Tabelle. Also in deinem Fall alle Standard-Berechtigungen für userX gelten, nicht die der admins. die Lösung ist
SET ROLE admins
vor dem erstellen der Tabelle:Mehr im Allgemeinen, würden Sie wollen, dies zu tun immer: Erstellen Sie alle Tabellen und Ansichten, durch eine Rolle in der Gruppe oder eine andere Rolle, die nicht im täglichen Einsatz und ermöglichen den Zugang zu den Beziehungen zu einer anderen Rolle in der Gruppe, dessen Berechtigungen geerbt werden, durch regelmäßige login-Rollen (Benutzer). Dies erleichtert erheblich das Sicherheits-management.
Cheers,
Patrick
ALTER DEFAULT PRIVILEGES
wirklich bedeutetALTER DEFAULT PRIVILEGES --(on objects created by the current user)