Rumah  >  Artikel  >  pangkalan data  >  Mengapa MySQL Melemparkan Ralat Sambungan Jauh "Kaedah Pengesahan Tidak Diketahui"?

Mengapa MySQL Melemparkan Ralat Sambungan Jauh "Kaedah Pengesahan Tidak Diketahui"?

Barbara Streisand
Barbara Streisandasal
2024-11-07 09:11:02651semak imbas

Why Does MySQL Throw an

Ralat Sambungan Jauh MySQL: "Kaedah Pengesahan Tidak Diketahui"

Apabila cuba mewujudkan sambungan jauh ke pelayan MySQL daripada mesin tempatan, anda mungkin menghadapi ralat berikut:

Warning: PDO::__construct(): The server requested authentication method unknown to the client [mysql_old_password] in ...

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

Memahami Masalah:

Ralat ini biasanya menunjukkan ketidakserasian antara kaedah pencincangan kata laluan yang digunakan oleh MySQL tempatan dan jauh pelayan. Versi MySQL sebelum 4.1 menggunakan kaedah pencincangan kata laluan 16-bait, manakala versi 4.1 dan ke atas menggunakan kaedah pencincangan 41-bait yang lebih selamat. Jika pelayan MySQL tempatan menggunakan kaedah pencincangan lama tetapi pelayan jauh menggunakan yang baharu, percubaan sambungan akan gagal dengan ralat "kaedah pengesahan tidak diketahui".

Menyelesaikan Isu:

Untuk menyelesaikan isu ini, anda perlu mengemas kini kata laluan pada pelayan MySQL jauh untuk menggunakan format pencincangan 41-bait baharu. Begini caranya:

  1. Sambung ke Pelayan MySQL Jauh:

    mysql -u [username] -p[password]
  2. Kemas kini Kata Laluan:

    ALTER USER [username] IDENTIFIED BY '[new_password]';
  3. Berikan Kebenaran:

    Pastikan bahawa pengguna mempunyai kebenaran yang diperlukan untuk mengakses pangkalan data:

    GRANT ALL PRIVILEGES ON [database_name].* TO [username]@'local_ip_address';
  4. Sambung semula:

    Cuba sambung ke pelayan MySQL jauh dengan kata laluan yang dikemas kini:

    $dsn = 'mysql:host=184.173.209.193;dbname=my_db_name';
    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
    );
    
    try {
        $online_dbh = new PDO($dsn, 'myusername', 'new_password', $options);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Success!";
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

Atas ialah kandungan terperinci Mengapa MySQL Melemparkan Ralat Sambungan Jauh "Kaedah Pengesahan Tidak Diketahui"?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn