Używam PHP mysqli_connect
do logowania się do bazy danych MySQL (wszystko na hoście lokalnym)
<?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');
}
?>
Plik ini serwera 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
ze caching_sha2_password
w pliku ini MySQL Server, to nie jest w ogóle możliwe, aby zalogować się lub user1 user2;
błąd: mysqli_connect (): serwer zażądał metody uwierzytelniania nieznanej klientowi [caching_sha2_password] w ...
ze mysql_native_password
w pliku ini MySQL Server, możliwe do logowania z user1, user2, ale z samego błędu;
jak mogę zalogować się przy użyciu caching_sha2_password
serwera mySql?
mysqli
.Odpowiedzi:
Od wersji PHP 7.4 nie stanowi to już problemu. Wsparcie dla
caching_sha2
metody uwierzytelniania został dodany do mysqlnd.Obecnie rozszerzenie PHP mysqli nie obsługuje nowej funkcji uwierzytelniania caching_sha2. Musisz poczekać, aż wydadzą aktualizację.
Sprawdź powiązany post od programistów MySQL: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Nie wspomnieli o PDO, może powinieneś spróbować połączyć się z PDO.
źródło
mysql_native_password
sugerowaną przez niektóre odpowiedzi.Rozwiązuję to poleceniem SQL:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
do którego odwołuje się https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
jeśli tworzysz nowego użytkownika
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
do którego odwołuje się https://dev.mysql.com/doc/refman/8.0/en/create-user.html
to działa dla mnie
źródło
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Usuń cudzysłowy (') po
ALTER USER
i zachowaj cudzysłów (') pomysql_native_password BY
U mnie też działa.
źródło
Jeśli korzystasz z systemu Windows i nie można go
caching_sha2_password
w ogóle używać , możesz wykonać następujące czynności:Instalator dokona wszystkich niezbędnych zmian w konfiguracji.
źródło
U mnie działa (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64 bity)
Edytuj plik
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:default_authentication_plugin=mysql_native_password
Zresetuj usługę MySQL w systemie Windows oraz w powłoce MySQL ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
źródło
Jak wiele osób, miałem ten sam problem. Chociaż użytkownik jest ustawiony na używanie mysql_native_password i mogę połączyć się z wiersza poleceń, jedynym sposobem uzyskania połączenia mysqli () jest dodanie
do sekcji [mysqld] w mojej konfiguracji na ubuntu 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf
źródło
Uruchomiłem następujące polecenie
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
w wierszu poleceń i na koniec ponownie uruchomiłem MySQL w usługach lokalnych.źródło
'root' @ 'localhost'
zamiast tego nie należy czytać żadnych spacjiALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
Teraz możesz zaktualizować do PHP7.4, a MySQL będzie działać
caching_sha2_password
domyślnie, więc domyślna instalacja MySQL będzie działaćmysqli_connect
bez konieczności konfiguracji.źródło
Jeśli używasz komputera Mac, oto jak to naprawić. Dzieje się tak po wielu próbach i błędach. Mam nadzieję, że to pomoże innym ...
Debugowanie:
$mysql --verbose --help | grep my.cnf $ which mysql /usr/local/bin/mysql
Rozdzielczość: nano /usr/local/etc/my.cnf
Dodaj: 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 ------
Wreszcie uruchom: usługi parzenia zrestartuj mysql
źródło
Wypróbowałem to w Ubuntu 18.04 i jest to jedyne rozwiązanie, które działało dla mnie:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
źródło
Myślę, że konfigurowanie serwera mysql bez szyfrowania caching_sha2_password nie jest przydatne, musimy znaleźć sposób na publikowanie, wysyłanie lub uzyskiwanie bezpiecznych informacji przez sieć. Jak widać w poniższym kodzie, nie używam zmiennej $ db_name i używam użytkownika na serwerze mysql ze standardowym hasłem konfiguracyjnym. Po prostu utwórz standardowe hasło użytkownika i skonfiguruj wszystkie uprawnienia. to działa, ale jak powiedziałem bez poczucia bezpieczeństwa.
<?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); } ?>
źródło