Empfehlung für den Mehrbenutzerbetrieb

Hallo.

Ich habe einen PG-Server in einer Schulungsumgebung zu betreuen an den folgende Anforderungen gestellt sind.

  1. Mehrere Benuter sollen auf einer DB arbeiten können.
  2. Die Nutzer sollen nur IHRE DB sehen und nutzen können.
  3. Die Nutzer sollten innerhalb ihrer DB alle Rechte haben.
  4. Dozenten sollen alle DB nutzen können.

Ich habe jetzt die Anmeldung per pam-ldap eingerichtet und alle Nutzer können arbeiten. ABER alle Nutzer können mehrere bzw. alle DBs nutzen.

Meine pg_hba.conf sah so aus:
host all all 0.0.0.0 0.0.0.0 pam postgres

Jetzt habe ich sie wie folgt geändert:
host postgres all 0.0.0.0 0.0.0.0 pam postgres
host samerole all 0.0.0.0 0.0.0.0 pam postgres
#host all all 0.0.0.0 0.0.0.0 pam postgres

Aber alle Nutzer können immer noch alle DBs sehen, wenn auch nicht mehr öffnen. Da sich alle Nase lang neue Nutzer aus den LDAP anmelden möchte ich ungern ständig die pg_hba.conf anpassen müssen.

Frage 1: Wie kann ich PG so konfigurieren das ein Dozent neue Datenbanken und Gruppen anlegen kann. Die Gruppenmitglieder aber nur IHRE Datenbank sehen und nutzen können? Somit würde ein Benutzer ohne Gruppe auch nichts sehen können.

Frage 2: Ich habe gerade im pg-handbuch in Kapitel 17.5 gelesen das Funktionen und Trigger gefährlich seinen können. Die Nutzer sollen Funktionen und Trigger, wenn möglich, nutzen können, aber ohne Risiko für das System. Wie läßt sich das konfigurieren?

Frage 3: Sind bestimmte Berechtigungen an den DBs template1 und postgres für alle Nutzer erforderlich?

Frage 4: Welche Rolle spielt die Rolle/Gruppe PUBLIC in der scheinbar keiner Mitglied ist?

Vielen Dank im Voraus
Gruß Karsten

Also es können alle deine Forderungen erfüllt werden bis auf folgenden Punkt: “Alle Benutzer sollen nur ihre DB sehen”.
Grundsätzlich können alle User alle Datenbanken sehen, allerdings kann man mit passenden Zugriffsrechten verhindern, das jemand auf andere Datenbanken zugreifen kann. Sprich, die User wissen, dass die Datenbank existiert, mehr ist aber nicht möglich.

Alles andere ist mit einer passenden Config in pg_hba.conf lösbar.

Zu Frage 2: Funktionen können gefährlich sein, wenn du sogenannte “untrusted” Sprachen verwendest. Solange nur “trusted” Languages zugelassen sind, kann man damit keinen Unsinn ausserhalb der DB anstellen.

Zu Frage 3: die pg_hba.conf sollte erst gar keinen Zugriff auf ‘postgres’ und ‘template1’ für andere User zulassen. Das lässt sich konfigurieren.

Zu Frage 4: PUBLIC ist eine Pseudogruppe, wenn du Rechte an PUBLIC vergibst, darf grundsätzlich jeder darauf zugreifen. man erspart sich auf diesem Wege den Umweg, das man Zugriffsrechte an jeden User vergeben muss, wenn alle auf ein Objekt zugreifen sollen.

So, wohin darf ich jetzt die Rechnung schicken? :wink:

ACK.

Zu Frage 2: Funktionen können gefährlich sein, wenn du sogenannte “untrusted” Sprachen verwendest. Solange nur “trusted” Languages zugelassen sind, kann man damit keinen Unsinn ausserhalb der DB anstellen.

Andere Chance, sich ins Bein zu ballern, ist ‘security definer’, wenn man als DB-Admin die function erstellt.

Andreas

Vielen Dank für die Infos.

Gruß
Karsten

akretschmer: schon wieder einer, der sich einfach davon machen möchte :wink: