Saya menggunakan php mysqli_connect
untuk login ke database MySQL (semua di localhost)
<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_HOST', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if(!$dbc){
die('error connecting to database');
}
?>
File ini Server MySQL:
[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password
dengan caching_sha2_password
di file ini Server MySQL, sama sekali tidak mungkin untuk login dengan user1 atau user2;
error: mysqli_connect (): Server meminta metode otentikasi yang tidak diketahui klien [caching_sha2_password] di ...
dengan mysql_native_password
di file MySQL Server ini, dimungkinkan untuk login dengan user1, tetapi dengan user2, kesalahan yang sama;
bagaimana saya bisa login menggunakan caching_sha2_password
di mySql Server?
mysqli
.Jawaban:
Mulai PHP 7.4, ini tidak lagi menjadi masalah. Dukungan untuk
caching_sha2
metode otentikasi telah ditambahkan ke mysqlnd.Saat ini, ekstensi PHP mysqli tidak mendukung fitur otentikasi caching_sha2 yang baru. Anda harus menunggu sampai mereka merilis pembaruan.
Periksa posting terkait dari pengembang MySQL: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Mereka tidak menyebutkan PDO, mungkin Anda harus mencoba menghubungkan dengan PDO.
sumber
mysql_native_password
seperti yang disarankan oleh beberapa jawaban.Saya menyelesaikan ini dengan perintah SQL:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
yang dirujuk oleh https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
jika Anda membuat pengguna baru
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
yang dirujuk oleh https://dev.mysql.com/doc/refman/8.0/en/create-user.html
ini berhasil untuk saya
sumber
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Hapus tanda kutip (') setelahnya
ALTER USER
dan pertahankan tanda kutip (') setelahnyamysql_native_password BY
Ini bekerja untuk saya juga.
sumber
Jika Anda menggunakan Windows dan tidak dapat digunakan
caching_sha2_password
sama sekali, Anda dapat melakukan hal berikut:Installer akan membuat semua perubahan konfigurasi yang diperlukan untuk Anda.
sumber
Ini berfungsi untuk saya (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64bits)
Edit file
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:default_authentication_plugin=mysql_native_password
Setel ulang layanan MySQL di Windows, dan di MySQL Shell ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
sumber
Seperti banyak orang lainnya, saya memiliki masalah yang sama. Meskipun pengguna diatur untuk menggunakan mysql_native_password, dan saya dapat menyambung dari baris perintah, satu-satunya cara agar saya dapat menghubungkan mysqli () adalah dengan menambahkan
ke bagian [mysqld] dari, dalam pengaturan saya di ubuntu 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf
sumber
Saya menjalankan perintah berikut
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
di baris perintah dan akhirnya memulai ulang MySQL di layanan lokal.sumber
'root' @ 'localhost'
harus dibacaALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
Sekarang Anda dapat memutakhirkan ke PHP7.4 dan MySQL akan digunakan
caching_sha2_password
secara default, jadi instalasi MySQL default akan berfungsi tanpamysqli_connect
konfigurasi yang diperlukan.sumber
Jika Anda menggunakan Mac, berikut cara memperbaikinya. Ini setelah banyak trial and error. Semoga ini bisa membantu orang lain ..
Debugging:
$mysql --verbose --help | grep my.cnf $ which mysql /usr/local/bin/mysql
Resolusi: nano /usr/local/etc/my.cnf
Tambahkan: default-authentication-plugin = mysql_native_password
------- # Default Homebrew MySQL server config [mysqld] # Only allow connections from localhost bind-address = 127.0.0.1 default-authentication-plugin=mysql_native_password ------
Akhirnya Jalankan: layanan brew restart mysql
sumber
Saya mencoba ini di Ubuntu 18.04 dan merupakan satu-satunya solusi yang berhasil untuk saya:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
sumber
Saya pikir tidak berguna untuk mengkonfigurasi server mysql tanpa enkripsi caching_sha2_password, kita harus menemukan cara untuk mempublikasikan, mengirim atau mendapatkan informasi yang aman melalui jaringan. Seperti yang Anda lihat pada kode di bawah ini, saya tidak menggunakan variabel $ db_name, dan saya menggunakan pengguna di server mysql dengan sandi konfigurasi standar. Cukup buat kata sandi pengguna Standar dan konfigurasikan semua hak istimewa. itu berhasil, tetapi bagaimana saya mengatakan tanpa seguritas.
<?php $db_name="db"; $mysql_username="root"; $mysql_password="****"; $server_name="localhost"; $conn=mysqli_connect($server_name,$mysql_username,$mysql_password); if ($conn) { echo "connetion success"; } else{ echo mysqli_error($conn); } ?>
sumber