提问人:Guti_Haz 提问时间:4/26/2018 最后编辑:MachavityGuti_Haz 更新时间:11/19/2023 访问量:309656
PHP mysqli_connect:客户端未知的身份验证方法 [caching_sha2_password]
php mysqli_connect: authentication method unknown to the client [caching_sha2_password]
问:
我正在使用 php 登录 MySQL 数据库(全部在 localhost 上)mysqli_connect
<?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 服务器 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
在MySQL服务器ini文件中,根本无法使用user1或user2登录;caching_sha2_password
错误:mysqli_connect():服务器请求的身份验证方法对客户端 [caching_sha2_password] 未知...
在MySQL服务器ini文件中,可以使用user1登录,但是使用user2登录,则出现相同的错误;mysql_native_password
如何在mySql Server上登录?caching_sha2_password
答:
从 PHP 7.4 开始,这不再是一个问题。对caching_sha2
身份验证方法的支持已添加到 mysqlnd。
目前,PHP mysqli 扩展不支持新的caching_sha2身份验证功能。 您必须等到他们发布更新。
查看MySQL开发人员的相关帖子: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
他们没有提到 PDO,也许您应该尝试与 PDO 联系。
评论
mysql_native_password
mysql_native_password
我通过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
这对我有用
评论
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
删除后面的引号 ('),并在后面保留引号 (')ALTER USER
mysql_native_password BY
它也对我有用。
评论
cd /usr/local/mysql/bin
./mysql -u root -p
它对我有用(PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 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';
评论
我在命令行中运行了以下命令,最后在本地服务中重新启动MySQL。ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
评论
'root' @ 'localhost'
ALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
如果您使用的是 Windows,但根本无法使用,则可以执行以下操作:caching_sha2_password
- 重新运行MySQL安装程序
- 选择MySQL Server旁边的“重新配置”(顶部项目)
- 单击“下一步”,直到找到“身份验证方法”
- 将“使用强密码加密进行身份验证(推荐)”更改为“使用传统身份验证方法(保留MySQL 5.X兼容性)
- 点击“下一步”
- 在“帐户和角色”中输入您的 Root 帐户密码,然后单击“检查”
- 点击“下一步”
- 继续单击“下一步”,直到到达“应用配置”
- 点击“执行”
安装程序将为您进行所需的所有配置更改。
评论
我在 Ubuntu 18.04 中尝试过这个 并且是唯一对我有用的解决方案:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
评论
我认为在没有caching_sha2_password加密的情况下配置mysql服务器是没有用的,我们必须找到一种方法通过网络发布,发送或获取安全信息。正如您在下面的代码中看到的,我不使用变量 $db_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);
}
?>
如果您使用的是 Mac,以下是修复方法。这是经过大量试验和错误之后的。希望这对其他人有所帮助。
调试:
$mysql --verbose --help | grep my.cnf
$ which mysql
/usr/local/bin/mysql
分辨率: 纳米 /usr/local/etc/my.cnf
添加:default-authentication-plugin=mysql_native_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 services restart mysql
评论
像许多人一样,我也遇到过同样的问题。尽管用户设置为使用 mysql_native_password,并且我可以从命令行进行连接,但我获得 mysqli() 连接的唯一方法是添加
默认身份验证插件=mysql_native_password
到[mysqld]部分,在Ubuntu 19.10的设置中,/etc/mysql/mysql.conf.d/mysqld.cnf
评论
/etc/mysql/mysql.cnf
systemctl restart mysql.service
/etc/mysql/mysql.conf.d/mysqld.cnf
现在您可以升级到 PHP7.4,默认情况下 MySQL 将随之使用,因此默认的 MySQL 安装无需配置即可。caching_sha2_password
mysqli_connect
评论
我正在使用 laravel 5.8 并通过在 .env 文件中添加 DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 来解决此错误,如下所示
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=dbname
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
就我而言,当我使用WAMP服务器时,我使用以下方法修复了它
- 请注意mySQL的“my.ini”文件中的端口。就我而言,当我切换黑白 MariaDB 和 MySQL DB 时,它被更改为 3308。
- 在创建 mysqli 对象时使用端口号。
使用上述步骤,我能够成功运行该程序。
phpMyAdmin GUI方式
注意:如果您遇到 root 用户帐户的问题,此方法可能不起作用。
- 以 root 身份登录 phpMyAdmin。
- 切换到“用户帐户”选项卡。
- 选择您收到错误的用户名。
- 从顶部按钮,切换到“登录信息”部分。
- 在“登录信息”框中,将“身份验证插件”从“缓存 sha2 身份验证”更改为“原生 MySQL 身份验证”。此外,您必须填写其他必填字段,显然,包括用户名和密码。
- 通过单击底部的“开始”按钮保存它。
- 返回航站楼并享受。:)
就我而言,我使用的是PHP框架,这是一个愚蠢的错误。Symfony
数据库凭据错误。paramers.yml
相应地更改凭据后,问题就消失了。
如果您尚未更改MySQL默认身份验证插件,可以通过以下方式进行更改:
- 登录MySQL
root
- 运行以下 SQL 命令:
a. 如果您在不同的服务器中运行 MySQL:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';
b. 如果您在不同的服务器中运行MySQL:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password
BY 'password';
在 Digital Ocean Managed Mysql 中,我们有一个更改加密的选项,您可以更改为旧版,它可以正常工作。
就我而言:
我正在使用 和 .由于默认身份验证并且还不支持它,因此我必须通过执行以下操作将 MYSQL 8 身份验证设置为:PHP 5.6
MYSQL 8
MYSQL 8
caching_sha2_password
PHP 5.6
mysql_native_password
加
default-authentication-plugin=mysql_native_password
到 Ubuntu 22.04 中配置文件行的末尾/etc/mysql/conf.d/mysql.cnf
评论
mysqli