Aggiunta di un utente autenticato con password a una configurazione postgres autenticata da peer che non funziona

Aug 21 2020

Vorrei aggiungere un utente di sola lettura a una configurazione postgres su un server remoto con autenticazione peer predefinita, che utilizza una password come metodo di autenticazione.

Creo il mio utente in questo modo:

CREATE USER my_user WITH PASSWORD 'some_pass';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
   GRANT SELECT ON TABLES TO my_user;

e ho aggiunto una regola al file pg_hba.conf, affermando che questo particolare utente dovrebbe essere in grado di accedere al database utilizzando una password.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   my_db           my_user                                 password <- my new line
local   all             all                                     peer

E poi parto psqldalla riga di comando in questo modo:

psql -d my_db -U my_user -W

e fornire "some_pass" quando richiesto. Funziona bene localmente, ma sul server ottengo questo errore:

psql: FATAL:  Peer authentication failed for user "my_user"

Devo riavviare postgresql in modo che le modifiche in pg_hba.conf abbiano effetto o manca qualcos'altro? Sono riluttante a riavviare postgresql poiché viene utilizzato in un ambiente di produzione.

EDIT: menziono che il server è remoto, ma ci accedo prima usando ssh prima di accedere al database, il che significa che la connessione al database è in realtà locale.

Risposte

1 a_horse_with_no_name Aug 21 2020 at 18:57

L'utente si connette da un host client remoto, quindi il tipo di autenticazione deve essere host, non quello localutilizzato per le connessioni locali che utilizzano named pipe.

Anche il metodo di autenticazione "password" non dovrebbe essere utilizzato, poiché invia la password in chiaro. Usa md5invece (o se il tuo server Postgres è configurato per questo, scram-sha-256)

Per consentire le connessioni remote è necessario inserire anche un indirizzo IP. Se conosci l'indirizzo IP puoi aggiungerlo. L'utilizzo 0.0.0.0/0consentirebbe una connessione da qualsiasi indirizzo IP.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host   my_db           my_user          0.0.0.0/0               md5

Se il computer client si trova nella stessa rete del server Postgres, samenetsarebbe una scelta più sicura di0.0.0.0/0

Per applicare le modifiche pg_hba.confè necessario ricaricare la configurazione. Non è necessario riavviare. Il ricaricamento può essere eseguito, ad esempio, select pg_reload_conf();mentre si è connessi come superutente.