php mysqli\u connect:客户端未知的身份验证方法[缓存\u sha2\u密码]

qyuhtwio  于 2021-06-20  发布在  Mysql
关注(0)|答案(11)|浏览(416)

我正在使用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');    
}
?>

这是mysql.user表:

mysql服务器ini文件:

[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 在mysql服务器ini文件中,根本不可能使用user1或user2登录;
错误:mysqli \u connect():服务器请求的身份验证方法对客户端[缓存\u sha2 \u密码]未知。。。
mysql_native_password 在mysql server ini文件中,可以使用user1登录,但是使用user2,同样的错误;
如何使用登录 caching_sha2_password 在mysql服务器上?

9vw9lbht

9vw9lbht1#

像许多人一样,我也有同样的问题。虽然用户被设置为使用mysql\u native\u密码,并且我可以从命令行连接,但是我要让mysqli()连接的唯一方法是添加
默认身份验证插件=mysql\u native\u password
在我的ubuntu 19.10安装程序中,/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]部分

oxcyiej7

oxcyiej72#

它为我工作(PHP5.6+pdo/mysql server 8.0/Windows7 64位)
编辑文件 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini :

default_authentication_plugin=mysql_native_password

在windows和mysql shell中重置mysql服务。。。

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
qij5mzcb

qij5mzcb3#

如果你用的是mac电脑,下面是解决方法。这是经过无数次的尝试和错误之后。希望这对其他人有帮助。。
调试:

$mysql --verbose --help | grep my.cnf

$ which mysql
/usr/local/bin/mysql

分辨率:nano/usr/local/etc/my.cnf
添加:default authentication plugin=mysql\u native\u 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服务重新启动mysql

jq6vz3qz

jq6vz3qz4#

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

删除后面的引号(') ALTER USER 并在后面加引号(') mysql_native_password BY 它对我也很有用。

62lalag4

62lalag45#

从php7.4开始,这不再是一个问题。支持 caching_sha2 身份验证方法已添加到mysqlnd。
目前,php mysqli扩展不支持新的缓存sha2身份验证特性。你必须等到他们发布更新。
查看mysql开发者的相关帖子:https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
他们没有提到pdo,也许你应该试着和pdo联系。

w41d8nur

w41d8nur6#

我在Ubuntu18.04中尝试过这一点,这是唯一对我有效的解决方案:

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
svdrlsy4

svdrlsy47#

我执行了以下命令 ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123'; 最后在本地服务中重新启动mysql。

uurity8g

uurity8g8#

现在您可以升级到php7.4,mysql也将随之升级 caching_sha2_password 默认情况下,默认mysql安装将与 mysqli_connect 不需要配置。

bprjcwpo

bprjcwpo9#

我通过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
这对我有用

pbpqsu0x

pbpqsu0x10#

我觉得配置mysql服务器没有缓存sha2密码加密是没有用的,我们要想办法通过网络发布、发送或者获取安全的信息。正如您在下面的代码中看到的,我没有使用变量$db\u name,我使用的是mysql服务器中的一个用户的standar配置密码。只需创建一个标准用户密码并配置所有权限。它是有效的,但是我说的不严肃。

<?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);
}

?>
30byixjq

30byixjq11#

如果你在windows上,无法使用 caching_sha2_password 总之,您可以执行以下操作:
重新运行mysql安装程序
选择mysql服务器旁边的“重新配置”(最上面的项)
单击“下一步”直到进入“身份验证方法”
将“use strong password encryption for authentication(recommended)”更改为“use legacy authentication method(retain MySQL5.x compatibility)”
单击“下一步”
在“帐户和角色”中输入根帐户密码,然后单击“检查”
单击“下一步”
一直单击“下一步”,直到进入“应用配置”
点击“执行”
安装程序将为您进行所需的所有配置更改。

相关问题