Privilegien für public werden nicht angezeigt

Hi!

Ich habe gerade postgree installiert und für jede Applikation eine eigene DB angelegt. Dann habe ich festgestellt, dass alle Benutzer auf alle DBs zugreifen können. Ich habe dann in folgendem Artikel


gelesen, dass std.mäßig gewisse Rechte an public zugewiesen werden. Ich sehe diese Rechte aber nirgends in pgAdmin. Der Beitragsteller hat das Problem gelöst, jedoch die von ihm angegebenen Menüpunkte gibt es bei mir im pgAdmin nicht und in den Reitern für die Privilegien der Datenbanken stehen nirgendwo irgendwelche Rechte für public. Lediglich im Schema selbst gibt es Rechte für public. Ich möchte aber auf DB-Ebene trennen und nicht auf Schema-Ebene. Nun habe ich das Recht einfach per SQL-Query entzogen, wie ebenfalls im Artikel erwähnt und jetzt haben die User tatsächlich keine Rechte mehr auf alle DBs sondern nur noch auf die ihnen zugeordneten. Aber jetzt schreit der pgAdmin jedes Mal, wenn ich mich mit einem User verbinde, dass er keinen Zugriff auf die anderen DBs hat. Nun meine zwei Fragen:

Wieso sah ich im pgAdmin nicht, dass der an public gewisse Rechte für eine DB gegeben waren? Das müsste doch unter Rechtsklick auf die DB / Menüpunkt Properties / Reiter Privileges oder Default Privileges aufscheinen, oder?
Warum meldet mir pgAdmin immer einen Fehler bzgl. der anderen DBs, bzw. warum überhaupt versucht er irgendwas mit den anderen DBs. Der User sollte doch gar nicht wissen, dass es diese DBs überhaupt gibt?

Vielen Dank für Hinweise.

lg,
pgnoob55

Vergiss PGAdmin. Ist nur ein Client.

Das Problem ist bekannt und durch meinen geschätzten Kollegen mal hier dokumentiert worden: Shared Database Hosting - PostgreSQL wiki

sagt mal - ist der Wiki-Artikel noch up to date?
(Erstellt 2008 - letzte Änderung 2013)

Habe nämlich aktuell genau diese Problematik - will mehrere Datenbanken auf einem Cluster betreiben ohne dass sich diese gegenseitig in die Karten schauen können.

(Version 9.5 - Windows Plattform)

Laut Radio Erewan ja. Mittlerweise kann man aber mit RLS möglicherweise das geschickter umsetzen.

ROW-LEVEL SECURITY POLICIES (RLS)?

Scheint mir noch zu wenig erforscht - schränkt auf Tabellenebene die Zugriffsrechte ein, wenn ich es richtig verstanden habe. Aber finde in Verbindung mit Postgres-Zugriffsproblematik keine ansprechenden Erläuterungen/Tutorials/Beispielkonfigurationen

Weiß auch nicht, ob es praxiskompatibel ist, da ja scheinbar nach dem Anlegen einer Tabelle eine Policy erstellt werden muss - das kann ich meine Benutzern nicht beibringen

Also RLS ist toll, wenn man selbst alles in der Hand hat (Datenbanken, wie Tabellen) und auch wirklich nur auf Tabellenebene arbeiten will,
Aber wenns nur darum geht, dass sich die DBs nicht gegenseitig sehen sollen, ist das eher der falsche Ansatz, bzw keine Lösung für das Problem. Ist ja auch ein ganz anderer Scope, so wäre es ziemlich umständlich auf Tabellen- bzw. Zeilenebene festzulegen, was Nutzer global sehen dürfen und was nicht. Ist bisschen als würde ich in einem Bücherregal die Seiten für einzelne Benutzer streichen, nur weil Sie das ganze Buch nicht lesen dürfen, anstatt einfach das Buch im ganzen zu verlegen :wink:

Ein sinnvoller Einsatz wäre vielleicht wenn man eine Tabelle mit Kurznachrichten hat, wobei der Nutzer nur seine eigenen lesen können darf.
Oder Eine Passworttabelle, wo der Nutzer nur sein eigenes ändern darf.

RLS, nicht RWS. Und ich meinte damit eher, die Sichten auf die Systemtabellen zu beschränken, damit nicht User A metadaten von User B sieht. Aber das war auch nur eine eher unausgegorene Idee von mir …

Danilo: geh mal ins Skype :wink:

Ich glaube nicht, dass RLS für Systemtabellen funktioniert, bzw, so vorgesehen ist. Müsste man mal testen, was da passiert, aber besser auf ner kleinen Sonderinstallation, ich vermute mal, die DB kann man danach wegwerfen.