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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top