Come passare la password alla riga di comando di mysql


20

Ho una password MySQL salvata su un file foo.php, ad esempio P455w0rd, quando provo ad usarla:

$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)

$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)

Entrambe le opzioni richiedono ancora la password, qual è il modo corretto di inviare la password stdin?


3
non deve essere vuoto tra -pe la password.
Fırat KÜÇÜK,

mysql non legge la password da stdin, non sono riuscito a capirlo da cosa la legge.
Omn

La risposta corretta è non mettere le tue password sulla riga di comando dove chiunque abbia accesso /procpuò leggerle banalmente finché il programma è in esecuzione . Ecco a cosa ~/.my.cnfserve, correttamente codificato a 0600
Shadur il

Risposte:


25

Devi stare molto attento a come passi le password alle righe di comando poiché, se non stai attento, finirai per lasciarlo aperto allo sniffing usando strumenti come ps.


Il modo più sicuro per farlo sarebbe quello di creare un nuovo file di configurazione e passarlo al mysqlutilizzando l' --defaults-file=o --defaults-extra-file=linea di comando.

La differenza tra i due è che quest'ultimo viene letto in aggiunta ai file di configurazione predefiniti, mentre con il primo viene utilizzato solo un file passato come argomento.

Il tuo file di configurazione aggiuntivo dovrebbe contenere qualcosa di simile a:

[client]
user=foo
password=P@55w0rd

Assicurati di proteggere questo file.

Quindi eseguire:

mysql --defaults-extra-file=<path to the new config file> [all my other options]

2
MySQL modificherà il suo argvper sovrascrivere i parametri dati al -pflag. Almeno questo è ciò che è concluso qui, insieme ad altre informazioni rilevanti: unix.stackexchange.com/questions/78757/…
Kusalananda

Questa è la soluzione migliore, in quanto fornisce una misura di sicurezza. È necessario chmod go-rwx e assicurarsi che questo argomento preceda tutti gli altri argomenti.
ChuckCottrill,

1
@Kusalananda, sì, ma come da commenti su unix.stackexchange.com/q/385339/135943 , ciò non significa che sia sicuro!
Carattere jolly

Potrebbe valere la pena aggiungere una nota --login-pathora che è supportato. Non è molto meglio di questo, ma è leggermente meno testo normale (anche se la barriera alla conversione dei contenuti in testo semplice è bassa).
Geoffrey Wiseman,

6
Impostare MYSQL_PWD nell'ambiente ( export MYSQL_PWD=muhpassword) ed eseguire il comando senza il -p. Vedi Variabili di ambiente del programma MySQL . Nonostante i terribili avvertimenti del manuale , questo è piuttosto sicuro . A meno che non avvii strani warez nella stessa shell in seguito. Quindi corriamo:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
David Tonhofer il

12

L' mysqlutilità client può prendere una password dalla riga di comando con le opzioni -po --password=.

Se lo usi -p, non ci deve essere spazio dopo la lettera dell'opzione:

$ mysql -pmypassword

Preferisco le lunghe opzioni negli script in quanto auto-documentano:

mysql --password=mypassword --user=me --host=etc

3
Ciò non è sicuro perché qualsiasi utente può visualizzare la password, direttamente /proc/$pid/cmdlineo tramite il pscomando. È vero che mysql sovrascrive la password in argv durante l'avvio ma c'è sempre una finestra temporale in cui un altro utente potrebbe osservare la password. Inoltre, su alcuni sistemi la sovrascrittura argv potrebbe non funzionare.
maxschlepzig,

3

Se si desidera iniziare mysqlcon una password, è necessario prima recuperare la password in una variabile:

MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`

Quindi puoi iniziare il tuo mysqlcomando con:

mysql -U root -p ${MYSQLPASS} mydb -h friendserver

1
Ciò compromette anche la sicurezza della password . Si noti che esiste la MYSQL_PWDvariabile di ambiente che viene letta mysqlse non si specifica -p. E sotto Linux questo è un metodo sicuro perché l'ambiente di un utente non può essere letto da altri utenti non privilegiati, al contrario del vettore argomento.
maxschlepzig,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.