Я использую 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');
}
?>
INI-файл сервера 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
с 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?
mysqli
.Ответы:
Начиная с PHP 7.4, это больше не проблема. В
caching_sha2
mysqlnd добавлена поддержка метода аутентификации.В настоящее время расширение PHP mysqli не поддерживает новую функцию аутентификации caching_sha2. Вам нужно подождать, пока они не выпустят обновление.
Проверьте соответствующий пост от разработчиков MySQL: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Они не упомянули PDO, возможно, вам стоит попробовать подключиться к PDO.
источник
mysql_native_password
как предлагается в некоторых ответах.Я решаю это с помощью команды 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
это работает для меня
источник
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Удалить кавычки (') после
ALTER USER
и оставить кавычки (') послеmysql_native_password BY
У меня это тоже работает.
источник
Если вы используете Windows и ее вообще невозможно использовать
caching_sha2_password
, вы можете сделать следующее:Установщик внесет все необходимые изменения в конфигурацию.
источник
Он работает для меня (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64 бит)
Отредактируйте файл
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:default_authentication_plugin=mysql_native_password
Сброс службы MySQL в Windows и в оболочке MySQL ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
источник
Как и у многих людей, у меня была такая же проблема. Хотя пользователь настроен на использование mysql_native_password, и я могу подключиться из командной строки, единственный способ заставить mysqli () подключиться - это добавить
в раздел [mysqld] в моей настройке на ubuntu 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf
источник
Я выполнил следующую команду
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
в командной строке и, наконец, перезапустил MySQL в локальных службах.источник
'root' @ 'localhost'
вместо этого здесь не следует читатьALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
Теперь вы можете выполнить обновление до PHP7.4, и MySQL будет работать
caching_sha2_password
по умолчанию, поэтому установка MySQL по умолчаниюmysqli_connect
не требует настройки.источник
Если вы используете Mac, вот как это исправить. Это после множества проб и ошибок. Надеюсь, это поможет другим ..
Отладка:
$mysql --verbose --help | grep my.cnf $ which mysql /usr/local/bin/mysql
Разрешение: nano /usr/local/etc/my.cnf
Добавить: 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 ------
Наконец, запустите: brew services перезапустите mysql
источник
Я пробовал это в Ubuntu 18.04, и это единственное решение, которое сработало для меня:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
источник
Я думаю, что бесполезно настраивать сервер mysql без шифрования caching_sha2_password, мы должны найти способ публиковать, отправлять или получать безопасную информацию через сеть. Как вы видите в приведенном ниже коде, я не использую переменную $ db_name, а я использую пользователя на сервере mysql со стандартным паролем конфигурации. Просто создайте стандартный пароль пользователя и настройте все привилегии. это работает, но как я уже сказал без секретов.
<?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); } ?>
источник