Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP';使用sha256_密码时的s mysqli(访问被拒绝)_Php_Mysql_Ssl_Mysqli_Sha256 - Fatal编程技术网

如何使用PHP';使用sha256_密码时的s mysqli(访问被拒绝)

如何使用PHP';使用sha256_密码时的s mysqli(访问被拒绝),php,mysql,ssl,mysqli,sha256,Php,Mysql,Ssl,Mysqli,Sha256,我正在使用MySQL 5.7.24和PHP7.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 'a

我正在使用MySQL 5.7.24和PHP7.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\u native\u password
时连接。使用
sha256\u密码时不可用

下面的PHP代码可以与mysql\u native\u密码配合使用:

$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(使用密码:YES)的访问被拒绝”。我尝试交替添加以下两条语句(在
real_connect
之前),但没有成功(但是,我要补充的是,我不需要这两个选项中的任何一个,因为我可以在不指定这些选项的情况下连接命令行客户机*)

那么,在PHP中如何使用来自
mysqli
sha256_密码呢

*注意:我的PHP服务器与我的MySQL服务器不同。在包含
ssl ca
ssl证书
ssl密钥
选项的PHP服务器上没有
My.cnf
,因此我确实可以尝试使用
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

据我从文档中了解,一次只能激活一个auth_选项

所以当你在做什么的时候

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';

您的第二次重新请求实际上将sha256_密码身份重新定义为mysql_本机_密码

请先查看此内容,然后告诉我:
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';