Ich benutze PHP mysqli_connect
für die Anmeldung bei einer MySQL-Datenbank (alle auf 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');
}
?>
Dies ist die mysql.user-Tabelle:
MySQL Server ini Datei:
[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
Mit caching_sha2_password
in der MySQL Server-INI-Datei ist es überhaupt nicht möglich, sich mit Benutzer1 oder Benutzer2 anzumelden.
Fehler: mysqli_connect (): Der Server hat eine Authentifizierungsmethode angefordert, die dem Client [caching_sha2_password] in ... unbekannt ist.
Mit mysql_native_password
in der MySQL Server-INI-Datei ist es möglich, sich mit Benutzer1 anzumelden, aber mit Benutzer2 der gleiche Fehler.
Wie kann ich mich mit caching_sha2_password
dem mySql Server anmelden?
mysqli
.Antworten:
Ab PHP 7.4 ist dies kein Problem mehr. Die Unterstützung für die
caching_sha2
Authentifizierungsmethode wurde zu mysqlnd hinzugefügt.Derzeit unterstützt die PHP-Erweiterung mysqli die neue Authentifizierungsfunktion caching_sha2 nicht. Sie müssen warten, bis sie ein Update veröffentlichen.
Überprüfen Sie den entsprechenden Beitrag von MySQL-Entwicklern: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Sie haben PDO nicht erwähnt, vielleicht sollten Sie versuchen, eine Verbindung mit PDO herzustellen.
quelle
mysql_native_password
wie es in einigen Antworten vorgeschlagen wird.Ich löse dies per SQL-Befehl:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
auf die unter https://dev.mysql.com/doc/refman/8.0/en/alter-user.html verwiesen wird
wenn Sie einen neuen Benutzer erstellen
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
auf die unter https://dev.mysql.com/doc/refman/8.0/en/create-user.html verwiesen wird
das funktioniert bei mir
quelle
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Entfernen Sie die Anführungszeichen (') nach
ALTER USER
und behalten Sie die Anführungszeichen (') nachmysql_native_password BY
Es funktioniert auch bei mir.
quelle
Wenn Sie unter Windows arbeiten und die Verwendung
caching_sha2_password
überhaupt nicht möglich ist , können Sie Folgendes tun:Das Installationsprogramm nimmt alle für Sie erforderlichen Konfigurationsänderungen vor.
quelle
Es funktioniert für mich (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64 Bit)
Bearbeiten Sie die Datei
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:default_authentication_plugin=mysql_native_password
Setzen Sie den MySQL-Dienst unter Windows und in der MySQL-Shell zurück ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
quelle
Wie viele, viele Menschen hatte ich das gleiche Problem. Obwohl der Benutzer so eingestellt ist, dass er mysql_native_password verwendet und ich über die Befehlszeile eine Verbindung herstellen kann, kann ich mysqli () nur zum Hinzufügen hinzufügen
im Abschnitt [mysqld] von, in meinem Setup unter Ubuntu 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf
quelle
Ich habe den folgenden Befehl
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
in der Befehlszeile ausgeführt und schließlich MySQL in lokalen Diensten neu gestartet.quelle
'root' @ 'localhost'
Stattdessen sollten hier keine Leerzeichen gelesen werdenALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
Jetzt können Sie ein Upgrade auf PHP7.4 durchführen, und MySQL wird
caching_sha2_password
standardmäßig verwendet, sodass die Standardinstallation von MySQLmysqli_connect
ohne Konfiguration funktioniert .quelle
Wenn Sie einen Mac verwenden, können Sie dies wie folgt beheben. Dies ist nach Tonnen von Versuch und Irrtum. Hoffe das hilft anderen ..
Debugging:
$mysql --verbose --help | grep my.cnf $ which mysql /usr/local/bin/mysql
Auflösung: nano /usr/local/etc/my.cnf
Hinzufügen: 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 ------
Schließlich ausführen: Brew Services starten MySQL neu
quelle
Ich habe dies in Ubuntu 18.04 versucht und ist die einzige Lösung, die für mich funktioniert hat:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
quelle
Ich denke, es ist nicht sinnvoll, den MySQL-Server ohne caching_sha2_password-Verschlüsselung zu konfigurieren. Wir müssen einen Weg finden, um sichere Informationen über das Netzwerk zu veröffentlichen, zu senden oder zu erhalten. Wie Sie im folgenden Code sehen, verwende ich keine Variable $ db_name, und ich verwende einen Benutzer auf einem MySQL-Server mit einem Standardkonfigurationskennwort. Erstellen Sie einfach ein Standardbenutzerkennwort und konfigurieren Sie alle Berechtigungen. es funktioniert, aber wie ich sagte ohne segurity.
<?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); } ?>
quelle