Benötigen alle Benutzer Zugriff auf die Postgres -Datenbank in pg_hba.conf?
-
22-10-2019 - |
Frage
Ich habe gerade den Benutzererstellungsprozess in Pgadmin getestet. Ich habe eine Datenbank db1
für das ich einen Benutzer erstellen möchte, um eine Verbindung dazu herzustellen. Ich möchte, dass dies die einzige Datenbank ist, mit der der Benutzer eine Verbindung herstellen kann.
Nachdem ich den Benutzer erstellt hatte, öffnete ich meine pg_hba.conf
Datei und ein paar Zeilen hinzugefügt:
host db1 dbuser 127.0.0.1/32 md5
host db1 dbuser ::1/128 md5
Der Postgres -Benutzer hat Zugriff auf alle Datenbanken:
host all postgres 127.0.0.1/32 md5
host all postgres ::1/128 md5
Wenn ich über PGADMIN eine Verbindung zum Server herstelle, erhalte ich einen Fehler, der das angibt dbuser
Hat keinen Zugriff auf die postgres
Datenbank.
Ist das normal? Sollte DBUSER sogar Zugriff auf die Postgres -Datenbank benötigen, wenn ich möchte, dass er nur zugreift db1
? Sobald ich Postgres zur Liste der Datenbanken für hinzufüge dbuser
, Ich kann mich verbinden.
Lösung
Was Sie sehen, ist Pgadmin Verbindung mit dem Konfigurierten herstellen Wartung DB - welches ist postgres
standardmäßig. Wählen Sie einen Server im Objektbrowser-Bereich aus und wählen Sie "Eigenschaften" im Kontextmenü (mit der rechten Maustaste). Das Dropdown-Menü bietet nur die typische Auswahl, aber Sie können Geben Sie einfach einen Datenbanknamen ein.
Wenn der Zugriff eines Benutzers beschränkt ist auf eines Datenbank in pg_hba.conf
(die ist Der effizienteste Ort, um dies zu tun), können Sie mit Pgadmin durch Konfigurieren arbeiten lassen Dieses hier Datenbank als Wartung DB. Nichts Schlimmes wird daraus kommen.
Die andere Option besteht darin, Zugriff auf die Wartungs -DB zu gewähren (postgres
oder was auch immer) in pg_hba.conf
zusätzlich.
Sie können auch alle Tore in öffnen pg_hba.conf
und regulieren den Zugriff mit Datenbankberechtigungen, wie @A_Horse in seiner Antwort erläutert. Dies ist einfacher zu verwalten, aber die Einschränkung des Zugriffs in pg_hba.conf
ist sicherer und schneller - robuster gegen DOS -Angriffe und schwere Last. Wird in den meisten Fällen jedoch keinen großen Unterschied machen.
Zitieren die Dokumentation von Pgadmin 1.22 (endgültige Veröffentlichung von Pgadmin III):
Das Feld Wartungs -DB wird verwendet, um die anfängliche Datenbank anzugeben, mit der Pgadmin eine Verbindung herstellt, und von deren erwartet wird, dass sie das haben PgagentSchema und adminpack Objekte installiert (beide optional). Bei PostgreSQL 8.1 und höher wird der Wartungs -DB normalerweise als "Postgres" bezeichnet, und in früheren Versionen "Vorlage" Vorlage1 "wird häufig verwendet, obwohl es vorzuziehen ist, eine" Postgres "-Datenbank für diesen Zweck zu erstellen, um die Überfüllung der Vorlagendatenbank zu vermeiden.
Andere Tipps
Sie müssen dies nicht über die pg_hba.conf tun.
Widerrufen Sie einfach das Konnektionsberechtigte für die Datenbank von diesem Benutzer.
Die Öffentlichkeit wird jedoch das Connect -Privileg gewährt. Sie müssen das also zuerst widerrufen:
revoke connect on db1 from public;
grant connect on db1 to dbuser;
Sie müssen die ausführen revoke ... from public
Anweisung für alle Datenbanken, um sicherzustellen, dass nur die spezifischen Benutzer eine Verbindung herstellen können.
Sobald Sie dies getan haben, können Sie PG_HBA.conf für alle Benutzer und alle Datenbanken "offen" lassen.