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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top