MySQL Ralat 1045: Akses Ditolak untuk Pengguna 'bil'@'localhost' Walaupun Bukti Kelayakan Betul
Apabila cuba mengakses pangkalan data MySQL jauh melalui baris arahan, pengguna mungkin kadang-kadang menghadapi "Ralat 1045: Akses dinafikan untuk pengguna Mesej 'bill'@'localhost'", menunjukkan bahawa sambungan telah ditolak walaupun memberikan bukti kelayakan log masuk yang betul.
Penyiasatan:
Pengguna telah mencipta pengguna baharu dinamakan 'bil', memberikan pengguna semua keistimewaan yang diperlukan, dan kemudian keluar dari akaun pengguna akar. Walau bagaimanapun, percubaan berikutnya untuk log masuk sebagai 'bil' pengguna daripada mesin tempatan ('localhost') mengakibatkan ralat.
Punca Punca:
Selalunya, ini isu timbul kerana kehadiran pengguna tanpa nama (pengguna dengan nama pengguna kosong dan 'localhost' sebagai hos) dalam jadual 'mysql.user'. Apabila menyambung daripada 'localhost', pelayan mengutamakan akaun pengguna yang sepadan berdasarkan nama hos atau alamat IP yang paling spesifik.
Penyelesaian 1: Alih Keluar Pengguna Tanpa Nama
Untuk menyelesaikannya isu itu, alih keluar pengguna tanpa nama daripada 'mysql.user' jadual:
DELETE FROM mysql.user WHERE user = '' AND host = 'localhost';
Penyelesaian 2 (Untuk Versi MySQL >= 5.7):
Jika menggunakan MySQL versi 5.7 atau lebih baru, anda boleh melumpuhkan penggunaan tanpa nama akaun melalui 'skip_name_resolve' pembolehubah:
SET GLOBAL skip_name_resolve = ON;
Pertimbangan Tambahan:
Sambungan Soket:
Dalam contoh yang disediakan, pengguna sedang menyambung melalui soket. Adalah penting untuk memastikan bahawa medan 'pengguna' dan 'kata laluan' ditentukan dengan betul, kerana mana-mana pengguna tanpa nama yang dikonfigurasikan dalam laluan log masuk berkemungkinan mengatasi kelayakan yang diberikan.
Sambungan TCP:
Apabila menyambung melalui TCP, bendera -h harus digunakan untuk menentukan nama hos atau alamat IP, berbanding dengan localhost:
mysql -u bill -p -hremote_hostname
Nama Pengguna Kosong:
Sesetengah perpustakaan pelanggan tidak mengendalikan nama pengguna kosong dengan betul. Daripada '', simbol '@' hendaklah digunakan untuk menandakan pengguna tanpa nama:
mysql -u'@'localhost'-ppassword
Atas ialah kandungan terperinci Mengapa MySQL Mengembalikan Ralat 1045: Akses Ditolak Walaupun dengan Bukti Kelayakan Yang Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!