Bagaimana saya bisa membuat kata sandi klien MySQL baca dari mylogin.cnf?

11

Saya mencoba untuk membuat klien mysql terhubung ke server mysql tanpa memerlukan kata sandi untuk diberikan secara interaktif. Langkah yang diambil:

1) Pertama buat file mylogin.cnf

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

2) File berhasil dibuat:

$ 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) Terhubung menggunakan klien mysql

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

Apakah ada nilai / konfigurasi default di suatu tempat yang membuat klien mengabaikan kata sandi di mylogin.cnf? Properti pengguna dan host dibaca dengan benar dari file.

Saya dapat terhubung dengan baik jika saya memberikan kata sandi pada baris perintah:

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

Versi klien MySQL 5.6.22, versi MySQL Server 5.6.22, keduanya di Oracle Linux 6. Klien dan server berada di host yang berbeda.

Terima kasih

Lefteris Koutsoloukas
sumber

Jawaban:

2

Apa pun caranya, Anda mungkin memiliki kata sandi yang tersimpan di suatu tempat. Bahkan jalur masuk MySQL 5.6 mudah didekripsi oleh siapa pun dengan motivasi. Peringatan itu mengatakan, ini akan menjadi solusi yang mudah.

Dalam skrip lingkungan Anda (misalnya ~/.profileatau ~/.bashrc), atur

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

(Tentu saja, memasukkan User, Passwd, dan Hostname yang Anda inginkan.)

Setelah shell relogin, Anda harus bisa melakukannya

mysql

... yang akan menggunakan alias Anda dan terhubung ke DB dan mengabaikan kata sandi apa pun dalam .my.cnffile.

Catatan keamanan: Jika ada pengguna lain di server Anda, Anda mungkin ingin chmod 700 skrip profil Anda sehingga kata sandi tidak mudah diakses oleh orang lain. Admin apa pun dengan root atau sudo masih dapat melihatnya; tidak ada jalan lain.

Joshua Huber
sumber
Ini adalah solusi untuk masalah yang sebenarnya, tapi saya baik-baik saja. Saya menerima jawaban ini dengan penafian kepada pembaca masa depan bahwa cara yang tepat untuk melakukannya adalah jawaban Nawaz, tetapi itu tidak bekerja pada lingkungan saya karena alasan yang tidak diketahui. Terima kasih!
Lefteris Koutsoloukas
1
-1 ini tidak menjawab permintaan OP juga tidak menghindari untuk menyimpan kata sandi dalam file. kata sandi sekarang disimpan dalam .profile bukan .mylogin.cnf. Tapi sekarang kata sandi ditampilkan oleh perintah ps.
miracle173
@acleacle, mohon validasi klaim Anda bahwa ps akan mengungkapkan kata sandi. Di sistem saya, kata sandi menunjukkan masked sebagai xxxxxxx di output ps. Jika klien MySQL Anda tidak bertindak seperti milik saya, silakan posting versi mysql dan distro yang Anda jalankan. Dan apakah Anda memiliki jawaban yang lebih baik untuk pertanyaan aktual OP?
Joshua Huber
2
@joshua: Panduan Pengguna Akhir untuk Keamanan Kata Sandi : "Gunakan opsi -pyour_passatau --password=your_passpada baris perintah (...) Ini nyaman tetapi tidak aman ."
miracle173
10

gunakan perintah berikut untuk mengatur jalur masuk terlebih dahulu

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

dan kemudian gunakan perintah di bawah ini untuk login mysql

mysql --login-path = lgpath

Bantuan tentang opsi jalur masuk mysql dapat dilihat oleh

set mysql_config_editor --help

Nawaz Sohail
sumber
Saya mencoba mengatur jalur masuk secara eksplisit seperti yang Anda sarankan, tetapi sayangnya ia memiliki perilaku yang sama: $ mysql_config_editor print --all [lgpath] user = <user> kata sandi = ***** host = <host> $ mysql --login -path = lgpath ERROR 1045 (28000): Akses ditolak untuk pengguna '<user>' @ '<host>' (menggunakan kata sandi: NO)
Lefteris Koutsoloukas
3

Saya memiliki masalah yang sama dengan OP, tetapi jawaban di utas ini membingungkan saya. Tautan Vinay Mandala sebenarnya bekerja untuk saya. Diposting di sini untuk kejelasan.

Masalah saya:

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

Itu membuktikan bahwa mysql_config_editortidak menangani karakter khusus dalam kata sandi dengan benar.

Larutan:

Ketika mysql_config_editordiminta kata sandi, pastikan Anda mengelilingi kata sandi dengan tanda kutip ganda (") . Setelah itu, Anda dapat masuk dengan baik.

quexy
sumber
1

Saya mendapatkan kesalahan ini, kecuali tertulis (menggunakan kata sandi: YA)

Alasan seperti yang disebutkan oleh Giovanni adalah karena "#" di kata sandi. Saya menemukan bahwa solusinya adalah menyisipkan tanda kutip di sekitar kata sandi Anda ketika diminta. Pembatasan yang sama ada dengan kata sandi teks biasa menggunakan .my.cnf.

gamorten
sumber
0

Jawaban Nawaz benar. Saya punya sedikit untuk ditambahkan. Saya sarankan Anda melakukan beberapa upaya dengan variabel lingkungan MYSQL_TEST_LOGIN_FILE untuk membuat file konfigurasi baru, kalau-kalau file default rusak. Gunakan juga --no-defaultsuntuk melewati .cnffile. Jika kata sandi berisi char #, mysql login-pathtidak berfungsi.

$ 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
Giovanni
sumber
Variabel lingkungan ini tidak disetel. Saya mengaturnya tetapi saya memiliki perilaku yang persis sama. Itu mengabaikan kata sandi di mylogin.cnf.
Lefteris Koutsoloukas
Apakah Anda yakin pengguna yang menjalankan mysqlperintah exec mysql? Jika tidak, ganti pemilik mylogin.cnfdan itu harus bekerja :)
Iazel
0

Saya menghadapi masalah yang sama dengan poster aslinya. Saya menduga itu ada hubungannya dengan karakter dalam kata sandi yang tidak dienkripsi / didekripsi dengan benar.

Untuk mengonfirmasi coba ubah kata sandi menjadi sesuatu yang sederhana dan lihat apakah masalah ini hilang.

Plazgoth
sumber
Saya memiliki masalah yang sama. Seperti yang ditunjukkan Plazgoth , saya memiliki karakter khusus pada kata sandi dan itu tidak berfungsi. Apa yang berhasil untuk saya adalah saran dari pengguna bglad di posting
Vinay Mandala
0

Saya punya masalah dengan skrip shell. Skrip saya mengubah nilai $ HOME dan ini menyebabkan --login-path = *** tampaknya diabaikan. Ketika saya berhenti mengubah nilai $ HOME maka mulai bekerja.

dbCarl
sumber
0

CATATAN jika Anda mencoba menjalankan di pathbawah pengguna linux root - Anda tidak bisa hanya menggunakan sudo. Anda harus masuk sebagai 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:$ ...

Juga seperti yang disebutkan dalam posting lain di sini .. Anda harus menggunakan tanda kutip ganda di sekitarmysql kata sandi Anda jika mengandung sesuatu selain karakter alfanumerik.

Zak
sumber