Ich muss etwas in Bezug auf die Einrichtung von PostgreSQL fehlen. Ich möchte mehrere Datenbanken und Benutzer erstellen, die voneinander isoliert sind, sodass ein bestimmter Benutzer nur auf die von mir angegebenen Datenbanken zugreifen kann. Soweit ich jedoch feststellen kann, hat jeder erstellte Benutzer Zugriff auf alle Datenbanken, ohne dass bestimmte Berechtigungen erteilt wurden.
Folgendes mache ich auf einem Ubuntu Server 12.04:
- apt-get install postgresql
- sudo -u postgres createuser -DRSP mike1 (Geben Sie das Kennwort für den neuen Benutzer an.)
- sudo -u postgres createdb data1
- psql -h localhost -U mike1 data1 (Geben Sie das Kennwort an, mit dem sich der Benutzer mike1 anmelden soll.)
Es scheint, dass der neue Benutzer "mike1" kein Problem damit hat, eine Verbindung mit der Datenbank "data1" herzustellen und Tabellen usw. zu erstellen Besitzer in Schritt 3). Ist das wirklich so, wie es funktionieren soll?
Ich möchte mike1 den vollständigen Zugriff auf data1 gewähren und dies dann für weitere Benutzer und Datenbanken wiederholen, um sicherzustellen, dass die Benutzer nur auf eine (oder möglicherweise mehrere) Datenbanken meiner Wahl zugreifen können.
quelle
Antworten:
Auf SQL-Ebene kann sich jeder Benutzer tatsächlich mit einer neu erstellten Datenbank verbinden, bis der folgende SQL-Befehl ausgegeben wird:
Sobald dies erledigt ist, muss jedem Benutzer oder jeder Rolle, die eine Verbindung herstellen können soll, explizit die Berechtigung connect erteilt werden:
Bearbeiten: In einem Szenario mit mehreren Mandanten
connect
würde mehr als nur das Privileg entfernt. Tipps zu Mandantenfähigkeit und bewährten Methoden finden Sie im öffentlichen Wiki von postgresql: Shared Database Hosting und Verwalten von Rechten in PostgreSQL .quelle
postgres
Datenbank gewähren, in dem Wissen, dass auf alle Datenbanken zugegriffen werden kann.PUBLIC hat standardmäßig Zugriff auf die Datenbank, kann jedoch nicht auf die Daten zugreifen. Sie können die ÖFFENTLICHKEIT WIDERRUFEN:
Wenn Sie diese Einstellung für alle zukünftigen Datenbanken wünschen, widerrufen Sie CONNECT für die Datenbank template1 (Standardvorlagendatenbank zum Erstellen einer neuen Datenbank):
quelle
Die andere Ebene, auf der Sie den Zugriff steuern können, ist die Datei pg_hba.conf.
Sie können herausfinden, wo die Datei gespeichert ist mit:
Wenn Sie sich für diesen Mechanismus entscheiden, gibt es eingebettete Kommentare, die möglicherweise ausreichen, um Ihnen den Einstieg zu erleichtern. Die Dokumente sind hier:
http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html
quelle
GRANT
/REVOKE
-Technik wahrscheinlich einfacher. Zum einen benötigen Sie dafür lediglich eine Superuser-Datenbankverbindung, zum anderen benötigen Sie ein Betriebssystem-Login, mit dem Sie die Datei bearbeiten können.Ich bin auf diesen Thread gestoßen, um zu verhindern, dass Benutzer die anderen Datenbanknamen auflisten. Das
REVOKE CONNECT
verhindert das nicht.Wie aus den Antworten auf diese SO-Frage hervorgeht, gibt es keinen (empfehlenswerten) Weg, dies zu erreichen.
quelle