Berechtigung auf Schema beschränken

Hallo Postgres-Experten,

ich habe eine Frage zu Berechtigungen. Und zwar habe ich eine Datenbank mit mehreren Schemata. Für jedes Schema gibt es eine eigene Benutzerrolle.
Jetzt möchte ich natürlich das eine Benutzerrolle nur auf ihr eigenes Schema zugreifen kann und nicht auf das der anderen.
Auf Datenbankebene kann man ja das CONNECT Privileg entziehen. Geht das auch für Schemata?

Ich habe das bis jetzt so gelöst, dass ich den Benutzerrollen alle Rechte auf Tabellen in anderen Schemata entzogen habe. Das funktioniert auch soweit. Nur so richtig zufrieden bin ich noch nicht. Ich hätte es gerne so, dass wenn ich mit dem pg_Admin mit einer Benutzerrolle auf ein Schema zugreife auf das diese nicht zugreifen darf gleich eine Fehlermeldung bekomme “keine Berechtigung blabla…”. Bei meiner aktuellen Lösung bekomme ich erst eine Fehlermeldung wenn ich eine Tabelle anwähle.
Kann man meinen Wunsch umsetzen?


Grüße
Karl der Heinz!

USAGE nur auf das gewollte Schema setzen, USAGE von public entziehen. Sollte passen.

Danke für die Anwort. Leider funktioniert das nicht. Ich habe folgendes eingegeben:

GRANT USAGE ON SCHEMA name1 TO user1;

REVOKE USAGE ON SCHEMA name1,name2,name3,... FROM public;

User1 kann sich weiterin mit allen Schemata verbinden. Mache ich was falsch?


Grüße
Karl der Heinz!

Ja, mach mal noch ein REVOKE ALL ON SCHEMA public FROM public;

Nein hat leider auch nicht funktioniert. User1 kann sich immernoch mit allen Schemata verbinden.

Grüße
Karl der Heinz!

Mit einem Schema verbinden? Man kann den search_path drauf legen, aber das sollte es dann auch schon sein.

Danke, reicht mir :slight_smile:

Jetzt habe ich noch eine Frage, gehört zwar in ein anderes Unterforum, aber wie kritisch ist es denn das public schema zu löschen? Im Prinzip wird es ja nicht genutzt, da jede Benutzerrolle ihr eigenes Schema hat. Muss ich etwas umstellen oder kann ich das ohne Probleme löschen?

Grüße
Karl der Heinz!

Stört es denn? Ist nur ein Namespace. Passieren sollte nix.

Sofern du keinen öffentlichen Namespace z.B. für Funktionen und Daten, die allen zugänglich sein sollen brauchst. Viele Extensions werfen ihre Funktionen halt da rein, weiß nicht was passiert wenn es fehlt.

Das ist in der Tat ein Argument :wink:

Danke euch beiden. Eine allerletzte Frage habe ich nun doch noch :smiley:

Ich habe gerade die Owner der Tabellen geändert. Ich habe es allerdings nicht geschafft den Owner von allen Tabellen mit einmal zu ändern. Ich dachte mit diesem Befehl sollte das klappen:

GRANT ALL ON ALL TABLES IN SCHEMA name2 TO user1;

Wisst ihr warum das nicht geht?


Grüße
Karl der Heinz!

Beginnt Deine Version mit 8 oder kleiner?

Nein, ich nutze PostgreSQL in der Version 9.2.7

Okay, Owner setzen geht auch anders. ALTER TABLE…

Stimmt, aber da kann ich ja immer nur eine Tabelle ändern oder? Zumindest steht das so in der Postgres-Doku. Ich habe im Internet schon Scripte gefunden, die die Rechte von allen Tabellen mit einmal ändern.
Ich dachte es gibt ein Postgres-Befehl der das tut.

Ja, wenn das ginge würde das vermutlich keiner scripten, gell?

Ja, naja… Featurerequest für Postgres 9.4.0 :smiley:

Danke für deine Hilfe.


Grüße
Karl der Heinz!