Non tutti gli utenti hanno bisogno di accedere al database Postgres in pg_hba.conf?
-
22-10-2019 - |
Domanda
Stavo testando il processo di creazione dell'utente in pgAdmin. Ho un db1
database per il quale voglio creare un utente sia in grado di connettersi ad esso. Io voglio che questo sia l'unico database che l'utente può connettersi.
Dopo aver creato l'utente, ho aperto il mio file pg_hba.conf
e ha aggiunto un paio di righe:
host db1 dbuser 127.0.0.1/32 md5
host db1 dbuser ::1/128 md5
L'utente Postgres ha accesso a tutte le banche dati:
host all postgres 127.0.0.1/32 md5
host all postgres ::1/128 md5
Quando si collega al server tramite pgAdmin, ottengo un errore che indica che dbuser
non ha accesso al database postgres
.
E 'normale? Dovrebbe dbuser anche richiede l'accesso al database Postgres, quando lo voglio solo db1
accesso? Non appena aggiungo Postgres alla lista delle banche dati per dbuser
, posso collegare.
Soluzione
Quello che si vede è pgAdmin il collegamento alla configurazione Manutenzione DB - che è postgres
per impostazione predefinita. Selezionare un server nel riquadro oggetto del browser e selezionare "Proprietà" dal menu contestuale (tasto destro del mouse). Il menu a discesa offre solo le scelte tipici, ma è possibile Basta digitare un nome di database .
Se l'accesso di un utente è limitato a una database in pg_hba.conf
(che è il luogo più efficace per farlo), è possibile farlo funzionare con pgAdmin configurando < em> questo database come la manutenzione db. Niente di male ne verrà fuori.
L'altra opzione è quella di concedere l'accesso alla manutenzione DB (postgres
o altro) in pg_hba.conf
in aggiunta.
Si può anche aprire tutte le porte in pg_hba.conf
e regolare l'accesso con i permessi di database, come @a_horse spiegato nella sua risposta. Questo è più facile da gestire, ma l'accesso limitando in pg_hba.conf
è più sicuro e più veloce - più robusta contro gli attacchi DoS e carico pesante. non farà una grande differenza nella maggior parte dei casi, però.
documentazione pgAdmin 1,22 (release finale di pgAdmin III):
Il campo di DB di manutenzione viene utilizzato per specificare il database iniziale che pgAdmin si collega a, e che saranno tenuti ad avere la pgAgent schema e adminpack oggetti installati (entrambi opzionali). su PostgreSQL 8.1 e superiori, la manutenzione DB è normalmente chiamato 'postgres', e 'template1' versioni precedenti viene spesso utilizzato, anche se è preferibile per creare database di un 'postgres' per questo fine di evitare ingombrare il database modello.
Altri suggerimenti
Non c'è bisogno di fare questo attraverso la pg_hba.conf.
È sufficiente revocare il privilegio di connessione sul database da quell'utente.
Comunque per default pubblico viene concesso il privilegio di connessione. Quindi è necessario prima revoca che:
revoke connect on db1 from public;
grant connect on db1 to dbuser;
È necessario eseguire l'istruzione revoke ... from public
per tutti i database per assicurarsi che solo gli utenti specifici possono collegarsi.
Una volta fatto questo, è possibile lasciare pg_hba.conf "aperto" per tutti gli utenti e tutti i database.