mysql client authentication protocol refused

Saya memiliki web server A dengan mysql versi 5.6.11 yang didalamnya ada aplikasi php yang harus membaca database di server B. Versi mysql di server B tersebut versi 5.0.77.

Ketika mencoba akses dari server A, baik melalui mysql client di command line maupun script php, koneksi gagal dan muncul error :

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option ‘secure_auth’ enabled)

Kata google, hal ini disebabkan karena mysql server di server B mendukung baik old style password maupun new style password. Sedangkan mysql client di server A hanya mau menggunakan new style password saja.

Hal ini agak aneh juga sebenarnya. Seharusnya sih kalau server tujuan bisa dua-duanya, client semestinya tinggal memilih yang sesuai saja. Tapi ternyata tidak demikian. Rupanya option ‘secure_auth’ enabled, memaksa client untuk hanya menggunakan new style password saja dan tidak mau ketemu sama sekali dengan pilihan old style 🙂

Memang new style password lebih aman dibandingkan dengan old style password. Kedepannya developer mysql memang menginginkan agar semua pengguna mysql beralih ke new style password. Namun seting untuk mendukung 2 style seringkali masih harus dilakukan karena masih banyak aplikasi jadul yang menggunakan mysql client yang hanya bisa old style password.

Syukurlah setelah beberapa jam berkonsultasi lebih lanjut dengan google, solusi untuk hal ini ternyata ada. Jika hanya ingin akses dari command line mysql, solusinya dengan menambahkan opsi –secure-auth=FALSE pada baris perintah. Contoh :

mysql> mysql -u NamaUser -h ip-server-tujuan –secure-auth=FALSE -p

Namun jika ingin juga akses dari script php, maka harus dilakukan modifikasi pada password. Caranya lakukan perintah berikut pada server B (tujuan) :

mysql> SET @@session.old_passwords = 0;

jika lancar maka akan muncul :

Query OK, 0 rows affected (0.00 sec)

selanjutnya,

mysql> SET PASSWORD FOR ‘NamaUser’@’192.168.10.5’ = PASSWORD(‘passwordnya’);

jika berhasil akan muncul:

Query OK, 0 rows affected (0.00 sec)

selanjutnya,

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

mysql> quit

cobalah untuk login lagi.