PHP 7.2 mysqli在没有SSL的情况下无法通过auth插件sha256_password连接到MySQL

问题描述 投票:2回答:1

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

将身份验证插件更改回'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)

任何想法如何解决此问题?

UPDATE

我还检查了它是否适用于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 mysql mysqli php-7.2
1个回答
0
投票

因此,PHP 7.2.25(从2019年11月21日开始版本)不支持MySQL'sha256_password'授权,以支持不使用SSL的连接。

© www.soinside.com 2019 - 2024. All rights reserved.