MySQL 8 创建新用户,密码不起作用

作者:编程家 分类: mysql 时间:2025-06-01

MySQL是一种常用的关系型数据库管理系统,它提供了创建用户并设置密码的功能。然而,在MySQL 8中,有时候创建新用户时密码却无法生效的问题出现了。本文将解释这个问题的原因,并提供解决方案。

在MySQL 8中,创建新用户和设置密码的语法如下:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

其中,'username'是要创建的用户名,'localhost'是用户所在的主机名,'password'是要设置的密码。然而,有时候即使按照这样的语法创建了新用户并设置了密码,但密码却无法生效。

这个问题的原因是MySQL 8默认启用了caching_sha2_password插件来加密密码,而不再使用之前的mysql_native_password插件。而某些MySQL客户端工具,如Navicat,对caching_sha2_password插件的兼容性并不好,导致密码无法通过该插件验证。

为了解决这个问题,可以通过修改MySQL配置文件来使用mysql_native_password插件。下面是具体的操作步骤:

步骤 1:打开MySQL配置文件

首先,找到并打开MySQL的配置文件my.cnf。根据不同的操作系统和安装方式,该文件的位置可能会有所不同。

步骤 2:添加配置项

在配置文件中添加以下配置项:

default_authentication_plugin=mysql_native_password

步骤 3:保存并重启MySQL

保存配置文件,并重启MySQL服务,以使配置生效。

完成以上步骤后,再次创建新用户并设置密码,密码就能够正确生效了。

案例代码:

假设我们要创建一个名为"newuser"的用户,密码为"password",并将其授权访问数据库"mydatabase"。按照以上解决方案的步骤,我们可以执行以下SQL语句来完成这个任务:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

ALTER USER 'newuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'localhost';

FLUSH PRIVILEGES;

在这个例子中,我们使用了ALTER USER语句来修改用户的身份验证插件为mysql_native_password。然后,通过GRANT语句为用户授权访问数据库的权限,并通过FLUSH PRIVILEGES语句使权限变更生效。

通过以上的解决方案,我们可以成功创建新用户并设置密码,而且密码将能够正确生效。这样,我们就可以在MySQL 8中顺利管理用户和保护数据库的安全了。