Aggiunta di un utente autenticato con password a una configurazione postgres autenticata da peer che non funziona
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 psql
dalla 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
L'utente si connette da un host client remoto, quindi il tipo di autenticazione deve essere host
, non quello local
utilizzato 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 md5
invece (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/0
consentirebbe 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, samenet
sarebbe 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.