Как подключиться к MySQL с помощью PHP mysqli при использовании sha256_password (доступ запрещен) - PullRequest
0 голосов
/ 14 января 2019

Я использую MySQL 5.7.24 и PHP 7.2.10. MySQL настроен с SSL. У меня есть пользователь my_user с паролем abc123. Я попытался настроить оба плагина аутентификации:

ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH sha256_password BY 'abc123';
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH mysql_native_password BY 'abc123';

С моего PHP-сервера я могу успешно подключиться с помощью клиента командной строки mysql, не указывая ничего, кроме хоста, пользователя и пароля. Однако из PHP я могу подключиться только при использовании mysql_native_password. Не при использовании sha256_password.

Следующий код PHP отлично работает с mysql_native_password:

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);

$con = $mysqli->real_connect('192.168.192.100', 'my_user', 'abc123', 'my_db', 
3306, null, MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
var_dump($mysqli->query('SELECT 1;'));

Однако, когда я использую sha256_password, я получаю сообщение об ошибке «Доступ запрещен для пользователя 'my_user'@'192.168.192.150' (используя пароль: ДА)." Я попытался поочередно добавить оба следующих оператора (до real_connect), но безуспешно (но, я бы добавил, мне не нужно ни одного из них, поскольку я могу соединиться с клиентом командной строки без указания этих опций * ).

$mysqli->ssl_set(null, null, 'ca.pem', null, null);
$mysqli->ssl_set('client-key.pem', 'client-cert.pem', 'ca.pem', null, null);

Так как же использовать sha256_password из mysqli в PHP?

* ПРИМЕЧАНИЕ. Мой PHP-сервер отличается от моего MySQL-сервера. На PHP не существует my.cnf того сервера, который содержит опции ssl-ca, ssl-cert и ssl-key, поэтому я действительно пытаюсь подключиться без них, используя mysql.

ОБНОВЛЕНИЕ 1

Если это полезно, вот некоторая диагностическая информация из phpinfo:

mysqli

MysqlI Support => enabled
Client API library version => mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Active Persistent Links => 0
Inactive Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => no value => no value
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off

mysqlnd

mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Compression => supported
core SSL => supported
extended SSL => supported
Command buffer size => 4096
Read buffer size => 32768
Read timeout => 86400
Collecting statistics => Yes
Collecting memory statistics => No
Tracing => n/a
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_caching_sha2_password,auth_plugin_sha256_password
API Extensions => mysqli,pdo_mysql

openssl

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.0g  2 Nov 2017
OpenSSL Header Version => OpenSSL 1.1.0g  2 Nov 2017
Openssl default config => /usr/lib/ssl/openssl.cnf

Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value
...