Memorizzazione della password del database nell'applicazione

1

Diciamo che la mia applicazione si connette al mio database. Ciò richiede che io abbia il nome utente e il database nella mia configurazione come segue:

postgresql://scott:tiger@localhost/mydatabase

Ho una distribuzione automatizzata per configurarlo e non voglio memorizzare il database sia nell'applicazione che nello script di distribuzione. Pertanto le mie opzioni come le vedo sono:

  • Fai in modo che postgresql non sia protetto con una password e protetto in un altro modo
  • Fai in modo che lo script di distribuzione generi un passaggio casuale e fallo aggiungere sia a postgresl che al file di configurazione

Qualcuno può aiutarmi a capire come si avvicinerebbe a questo da un punto di vista della sicurezza, per favore.

    
posta Jimmy 09.03.2014 - 12:58
fonte

2 risposte

2

Questo in realtà sembra un caso d'uso abbastanza decente per il supporto TLS di PostgreSQL. È possibile configurare un certificato client affidabile per l'applicazione da utilizzare con lo script di distribuzione e quindi ottenere gli altri vantaggi di non disporre di un segreto condiviso, oltre ovviamente alla crittografia (a meno che l'app sia già associata alla CPU, nel qual caso selezionare il codice NULL è una soluzione possibile). A volte l'aggiunta di TLS complica le cose, ma sembra che in questo caso potrebbe davvero semplificarle.

link

Il richiamo della sessione TLS può aggiungere qualche millisecondo di latenza, ma se gestisci già un pool di connessioni, non sospetto che l'app lo noterebbe.

    
risposta data 30.03.2014 - 06:11
fonte
0

Postgres consente a determinati utenti di connettersi da un particolare IP senza fornire una password. Questo può essere fatto usando il file pg_hba.conf usando il seguente formato:

host       database  user  address  auth-method  [auth-options]

(Tratto da documentazione )

di Postgres

Un'altra alternativa, e forse una più sicura, sarebbe usare le variabili d'ambiente (supponendo che tu sia su un sistema simile a Linux):

(dalla tua shell, che può essere caricata in un file .profile o .login):

export DB_USER='scott'
export DB_PASS='tiger'

E poi nel tuo script, potresti semplicemente fare:

postgresql://$DB_USER:$DB_PASS@localhost/mydatabase

o ENV ['DB_USER'], $ _ENV ['DB_USER'], a seconda della lingua che usi.

Ciò ti consente di "condividere" il tuo codice, senza che siano esposte informazioni sensibili. Potrebbe anche aiutarti a inserire il nome host DB e il nome DB in variabili.

    
risposta data 11.03.2014 - 06:34
fonte

Leggi altre domande sui tag