Come posso fare in modo che il client MySQL legga la password da mylogin.cnf?


11

Sto cercando di connettere il client mysql a un server mysql senza richiedere che la password sia data in modo interattivo. Passi compiuti:

1) Innanzitutto creare un file mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) File creato correttamente:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Connettiti usando il client mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Esiste un valore / configurazione predefinito da qualche parte che fa ignorare la password al client in mylogin.cnf? Le proprietà dell'utente e dell'host sono state lette correttamente dal file.

Sono in grado di connettermi bene se fornisco la password dalla riga di comando:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

La versione client MySQL è 5.6.22, la versione MySQL Server è 5.6.22, sia su Oracle Linux 6. Client e server si trovano su host diversi.

Grazie

Risposte:


2

In ogni caso, probabilmente avrai una password salvata da qualche parte. Anche il percorso di login di MySQL 5.6 è facilmente decifrabile da chiunque abbia la motivazione. Questo avvertimento diceva che sarebbe stata una soluzione facile.

Nello script dell'ambiente (ad es. ~/.profileO ~/.bashrc), impostare

alias mysql='mysql -uUser -pPasswd -hHostname'

(inserendo l'utente, la password e il nome host desiderati, ovviamente.)

Dopo aver effettuato nuovamente l'accesso alla shell, dovresti essere in grado di farlo semplicemente

mysql

... che utilizzerà il tuo alias e si connetterà al DB e ignorerà tutte le password nei .my.cnffile.

Nota di sicurezza: se sul server sono presenti altri utenti, è possibile che tu desideri chmod 700 lo script del tuo profilo in modo che la password non sia facilmente accessibile da altri. Qualsiasi amministratore con root o sudo sarà in grado di vederlo ancora; niente da fare.


Questa è una soluzione al problema reale, ma sto bene. Accetto questa risposta con il disclaimer per i futuri lettori che il modo corretto di farlo è la risposta di Nawaz, ma che non funziona nel mio ambiente per un motivo sconosciuto. Grazie!
Lefteris Koutsoloukas

1
-1 questo non risponde alla domanda dell'OP né evita di memorizzare una password in un file. la password è ora memorizzata in .profile anziché in .mylogin.cnf. Ma ora la password viene visualizzata dal comando ps.
miracle173,

@miracle, per favore conferma la tua affermazione che ps rivelerà la password. Sui miei sistemi, la password mostra mascherata come xxxxxxx nell'output ps. Se il tuo client MySQL non si comporta come il mio, pubblica la versione mysql e la distribuzione che stai eseguendo. E hai una risposta migliore alla vera domanda del PO?
Joshua Huber,

2
@joshua: Linee guida per l'utente finale per la sicurezza delle password : "Utilizzare un'opzione -pyour_passo --password=your_passsulla riga di comando (...) È utile ma non sicuro ."
miracle173,

10

utilizzare il comando seguente per impostare prima il percorso di accesso

mysql_config_editor set --login-path = lgpath --user = root -p
password

e quindi usa il comando seguente per accedere a mysql

mysql --login-path = lgpath

Guida per le opzioni del percorso di accesso mysql può essere visto da

mysql_config_editor set --help


Ho provato a impostare esplicitamente un percorso di accesso come hai suggerito, ma sfortunatamente ha lo stesso comportamento: $ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath ERRORE 1045 (28000): Accesso negato per l'utente '<utente>' @ '<host>' (usando password: NO)
Lefteris Koutsoloukas

3

Ho avuto lo stesso problema di OP, ma le risposte in questa discussione mi hanno confuso. Il link di Vinay Mandala ha funzionato per me. Ripubblicato qui per chiarezza.

Il mio problema:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Dimostra che mysql_config_editornon gestisce correttamente i caratteri speciali nella password.

Soluzione:

Quando viene mysql_config_editorrichiesta la password, assicurarsi di racchiudere la password tra virgolette doppie (") . Successivamente, è possibile accedere correttamente.


1

Stavo ricevendo questo errore, tranne per il fatto che diceva (usando la password: SÌ)

Il motivo menzionato da Giovanni era a causa di un "#" nella password. Ho scoperto che una soluzione alternativa consiste nell'inserire virgolette attorno alla password quando richiesto. La stessa restrizione esiste con le password in testo semplice che utilizzano .my.cnf.


0

La risposta di Nawaz è corretta. Ho poco da aggiungere. Ti suggerisco di fare alcuni tentativi con la variabile d'ambiente MYSQL_TEST_LOGIN_FILE per creare un nuovo file di configurazione, nel caso in cui il file predefinito sia corrotto. Utilizzare anche --no-defaultsper saltare i .cnffile. Se la password contiene il carattere #, mysql login-pathnon funziona.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

Questa variabile di ambiente non è stata impostata. L'ho impostato ma ho avuto esattamente lo stesso comportamento. Ha ignorato la password in mylogin.cnf.
Lefteris Koutsoloukas

Sei sicuro l'utente che mysqlè il comando exec mysql? In caso contrario, cambia il proprietario di mylogin.cnfe dovrebbe funzionare :)
Iazel

0

Sto riscontrando un problema simile al poster originale. Ho il sospetto che abbia a che fare con i caratteri della password che non vengono crittografati / decrittografati correttamente.

Per confermare prova a cambiare la password in qualcosa di semplice e vedi se questo problema scompare.


Ho avuto lo stesso problema. Come ha sottolineato Plazgoth , avevo un carattere speciale nella password e non funzionava. Ciò che ha funzionato per me è il suggerimento dell'utente bglad in questo post
Vinay Mandala,

0

Ho avuto questo problema con uno script di shell. Il mio script stava cambiando il valore $ HOME e questo ha fatto sì che --login-path = *** sembrasse ignorato. Quando ho smesso di modificare il valore $ HOME, ha iniziato a funzionare.


0

NOTA se stai tentando di eseguire l'utente pathsotto linux root - Non puoi semplicemente usarlo sudo. Devi accedere come root IE

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

Inoltre, come accennato in altri post qui .. È necessario utilizzare le virgolette intorno tua mysqlpassword se contiene qualcosa di diverso da caratteri alfanumerici.

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.