Mehrere User, Verschiedene Rechte, Eine Datenbank

Lieber pg-forum User,

Ich stehe zur Zeit vor einem kleinen Problem. Ich habe eine Datenbank in der mehrere User ihre Datensaetze (Ein Datensatz bildet sich in mehrere Tabellen ab) ablegen koennen. Nun meine Fragen:

  1. Wie kann ich sicherstellen, dass nur der User, der den Datensatz angelegt hat diesen auch aendern kann.
  2. Alle anderen User trotzdem Lesezugriff auf alle Datensaetze haben, ausser ein Datensatz ist explizit als private getagged.


    Wichtig ist, dass ich nur die Moeglichkeit habe in Postgres zu arbeiten. Extra Software on the top von Postgres ist nicht erlaubt.

Habt Ihr da Ideen?

Gruesse
Halech

Ich denke die einzige Möglichkeit die Du hast, is updates nur durch stored functions abzuwickeln. Innerhalb der Funktion prüfst Du dann ob der Benutzer den Datensatz der geänder werden soll auch dem aktuellen Benutzer “gehört” (das setzt natürlich voraus, dass Du den Ersteller des Datensatzes auch gespeichert hast)

Um den Update der Tabellen “manuell” (also via einem UPDATE statement) zu unterbinden, musst Du für alle Benutzer das UPDATE privileg wegnehmen. Die Funktion die den Update dann macht, wird als angelegt mit dem Besitzer der Tabellen und dem Zusatz “SECURITY DEFINER”. Damit läuft die Funktion dann mit den Rechten des Tabellen-Besitzers und kann den UPDATE machen.

Neben dem, was castorp schon sagte:

Punkt 2 kannst Du über eine VIEW lösen und auf die Tabelle selber auch lesenden Zugriff sperren. In der VIEW definierst Du, daß private false sein muß, falls current_user nicht paßt.

Andreas

Ah, danke.
Das hatte ich ganz übersehen.