php mysqli_connect: метод проверки подлинности, неизвестный клиенту [caching_sha2_password]
Я использую php mysqli_connect
для входа в базу данных MySQL (все на 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');
}
?>
это таблица mysql.user: ![mysql.user table]()
MySQL Server ini File:
[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
с помощью caching_sha2_password
в ini файле MySQL Server невозможно вообще войти в систему с user1 или user2;
ошибка: mysqli_connect(): сервер запросил неизвестный клиенту метод аутентификации [caching_sha2_password] в...
с mysql_native_password
в ini файле MySQL Server, возможно войти в систему с user1, но с user2, та же ошибка;
Как я могу войти, используя caching_sha2_password
на сервере mySql?
Ответы
Ответ 1
В настоящее время расширение php mysqli не поддерживает новую функцию аутентификации caching_sha2. Вы должны ждать, пока они выпустят обновление.
Ознакомьтесь с соответствующим постом от разработчиков MySQL: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Они не упомянули PDO, возможно, вам следует попытаться подключиться к PDO.
Ответ 2
Я решаю это с помощью команды SQL:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
на который ссылается https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
если вы создаете нового пользователя
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
на который ссылается https://dev.mysql.com/doc/refman/8.0/en/create-user.html
это работает для меня
Ответ 3
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Удалите кавычки (') после ALTER USER
и сохраните кавычку (') после mysql_native_password BY
Это работает и для меня.
Ответ 4
Если вы используете Windows и вообще не можете использовать caching_sha2_password
, вы можете сделать следующее:
- перезапустите установщик MySQL
- выберите "Reconfigure" рядом с MySQL Server (верхний элемент)
- нажимайте "Далее", пока не дойдете до "Метод аутентификации"
- измените "Использовать надежное шифрование пароля для аутентификации (РЕКОМЕНДУЕТСЯ)" на "Использовать устаревший метод аутентификации (сохранить совместимость с MySQL 5.X)
- Нажмите кнопку "Далее"
- введите пароль своей учетной записи в разделе "Учетные записи и роли" и нажмите "Проверить"
- Нажмите кнопку "Далее"
- продолжайте нажимать "Далее", пока не дойдете до "Применить конфигурацию"
- нажмите "Выполнить"
Установщик сделает все необходимые изменения конфигурации.
Ответ 5
Я ALTER USER 'root' @'localhost' identified with mysql_native_password BY 'root123';
следующую команду ALTER USER 'root' @'localhost' identified with mysql_native_password BY 'root123';
в командной строке и, наконец, перезапустите MySQL в локальных службах.
Ответ 6
Вы не сможете соединиться с PDO, возвращает тот же результат, что и MySQL.
Ответ 7
Это работает для меня (PHP 5.6 + PDO/MySQL Server 8.0/Windows 7 64bit)
Отредактируйте файл C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:
default_authentication_plugin=mysql_native_password
Сброс службы MySQL в Windows и в MySQL Shell...
ALTER USER [email protected]'%' IDENTIFIED WITH mysql_native_password BY 'password';
Ответ 8
Для пользователей Laravel, имеющих эту проблему с MySQL 8.0.x, добавьте
'modes'=> [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
в ваш файл database.php, как показано ниже:
// database.php
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env( 'DB_HOST', '127.0.0.1' ),
'port' => env( 'DB_PORT', '3306' ),
'database' => env( 'DB_DATABASE', 'forge' ),
'username' => env( 'DB_USERNAME', 'forge' ),
'password' => env( 'DB_PASSWORD', '' ),
'unix_socket' => env( 'DB_SOCKET', '' ),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'modes' => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
],
],
Это исправило это для меня.
Ответ 9
Я попробовал это в Ubuntu 18.04
и это единственное решение, которое сработало для меня:
ALTER USER [email protected]'%' IDENTIFIED WITH mysql_native_password BY 'password';
Ответ 10
Я думаю, что бесполезно настраивать сервер mysql без шифрования caching_sha2_password, мы должны найти способ публиковать, отправлять или получать защищенную информацию через сеть. Как вы видите в коде ниже, я не использую переменную $ db_name, а я использую пользователя на сервере MySQL с паролем стандартной конфигурации.
Просто создайте пароль пользователя Standar и настройте все привилегии. это работает, но как я сказал без секретности.
<?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);
}
?>