php mysqli_connect:客户端未知的身份验证方法[caching_sha2_password]

时间:2018-04-25 16:15:33

标签: php mysql hash sha

我使用php Prelude> take 3 "Hello" "Hel" 登录MySQL数据库(全部在localhost上)

mysqli_connect

这是mysql.user表: mysql.user table

MySQL Server ini文件:

<?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 Server 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

,根本无法使用user1或user2登录;

  

错误:mysqli_connect():服务器请求客户端未知的身份验证方法[caching_sha2_password] ...

在MySQL Server ini文件中使用caching_sha2_password

,可以使用user1登录,但使用user2,同样的错误;

如何在mySql Server上使用mysql_native_password登录?

13 个答案:

答案 0 :(得分:75)

我通过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

引用

这对我有用

答案 1 :(得分:13)

目前,php mysqli扩展不支持新的caching_sha2身份验证功能。 你必须等到他们发布更新。

检查mysql开发人员的相关帖子:https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

他们没有提到PDO,也许你应该尝试与PDO联系。

答案 2 :(得分:5)

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

ALTER USER之后删除cort('),并在mysql_native_password BY之后删除cort(')

这对我也有用。

答案 3 :(得分:1)

它为我工作(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';

答案 4 :(得分:1)

就像许多人一样,我遇到了同样的问题。尽管用户设置为使用mysql_native_password,并且可以从命令行进行连接,但是我可以使mysqli()连接的唯一方法是添加

  

default-authentication-plugin = mysql_native_password

在我在ubuntu 19.10上的设置中的/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]部分

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如果您使用的是Windows,并且根本无法使用caching_sha2_password,则可以执行以下操作:

  1. 重新运行MySQL Installer
  2. 选择MySQL Server旁边的“重新配置”(顶部)
  3. 单击“下一步”,直到进入“身份验证方法”
  4. 将“使用强密码加密进行身份验证(推荐)”更改为“使用旧式身份验证方法(保持MySQL 5.X兼容性)
  5. 点击“下一步”
  6. 在“帐户和角色”中输入您的“ root”帐户密码,然后单击“检查”
  7. 点击“下一步”
  8. 继续单击“下一步”,直到进入“应用配置”
  9. 点击“执行”

安装程序将为您进行所有需要的配置更改。

答案 7 :(得分:0)

我在Ubuntu 18.04中尝试过 并且是唯一对我有用的解决方案:

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

答案 8 :(得分:0)

我认为在不使用caching_sha2_password加密的情况下配置mysql服务器是没有用的,我们必须找到一种通过网络发布,发送或获取安全信息的方法。正如您在下面的代码中看到的那样,我不使用变量$ db_name,而Im使用具有标准配置密码的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);
}

?>

答案 9 :(得分:0)

对于Ubuntu 19.10 只需

cd /etc/mysql/mysql.conf.d

然后使用nano或类似的东西编辑mysqld.cnf

sudo nano mysqld.cnf

使用

重新启动Mysql服务
sudo /etc/init.d/mysql restart

仅此而已。它对我有用

答案 10 :(得分:0)

现在您可以升级到PHP7.4,默认情况下,MySQL将与caching_sha2_password一起使用,因此默认的MySQL安装将与mysqli_connect一起使用。

答案 11 :(得分:0)

我正在使用 Laravel 5.8 并通过在 .env 文件中添加 DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 来解决此错误,MAMP 服务器如下所示

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

答案 12 :(得分:-1)

如果您使用的是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服务重启mysql