PHP 7.2 mysqli 无法使用没有 SSL 的身份验证插件 sha256_password 连接到 MySQL

标签 php mysql mysqli php-7.2

将 MySQL 中的用户身份验证插件更改为“sha256_password”:

ALTER USER 'user'@'N.N.N.N' IDENTIFIED WITH 'sha256_password' BY 'password';

test.php:

#!/usr/bin/env php
<?php
$my = new mysqli('M.M.M.M', 'user', 'password');
echo "OK\n";
$my->close();
?>

不适用于“sha256_password”:

php test.php
Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'user'@'hostname' (using password: YES) in /home/user/test.php on line 3

将用户身份验证插件改回“mysql_native_password”:

ALTER USER 'user'@'N.N.N.N' IDENTIFIED WITH 'mysql_native_password' BY 'password';

将 auth 插件改回 'mysql_native_password' 连接后:

php test.php
OK

软件版本:

php --version
PHP 7.2.25-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Nov 28 2019 07:41:59) ( NTS )

dpkg -l | grep libmysqlclient20
ii  libmysqlclient20:amd64                5.7.28-0ubuntu0.16.04.2

mysqld -V
mysqld  Ver 5.7.26-29-57 for debian-linux-gnu on x86_64 (Percona XtraDB Cluster (GPL), Release rel29, Revision 03540a3, WSREP version 31.37, wsrep_31.37)

有什么办法解决这个问题吗?

更新:

我还检查了它是否适用于 python MySQLdb 连接器:

import MySQLdb
con = MySQLdb.connect(host='127.0.0.1',user='user', passwd='password')
cur = con.cursor()
cur.execute('select 1')
print(cur.fetchall())
con.close()

最佳答案

所以看起来 PHP 7.2.25(2019 年 11 月 21 日的版本)不支持对没有 SSL 的连接进行 MySQL“sha256_password”授权。

关于PHP 7.2 mysqli 无法使用没有 SSL 的身份验证插件 sha256_password 连接到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416827/

相关文章:

php - 价格低-高/高-低过滤 PHP/Mysql

c# - 由同一台本地计算机上的多个应用程序并发访问轻量级/(嵌入式?)SQL 数据库?

php - 仅从数组中显示一次

php - MySQLi 等效的 MySQL 代码

mysql - MemSQL - 跨主节点和叶节点清除计划缓存

php - 在mysql中绑定(bind)参数后是否可以更改查询?

php - 通过 Many2One 字段搜索 odoo PHP XMLRPC

php - 获取 mysql 结果,然后随机化结果顺序,然后显示一个与其他结果不同的结果

php - 如何获取最后一个完整的 MS SQL Server 错误消息?

mysql - 查询多个连接或添加额外列