sql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Jbx123456!'; Query OK, 0 rows affected (0.01 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) mysql> grant all privileges on *.* to root@'localhost' with grant option; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) mysql> create user root@'%' identified by '123456'; ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation mysql> mysql> grant all privileges on *.* to root@'%' with grant option; ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)怎么解决
时间: 2025-03-12 11:04:34 浏览: 65
从错误信息来看,当前使用的用户`root@'localhost'`无法执行 `GRANT` 和 `CREATE USER` 操作,这通常是因为权限不足或者是密码认证的问题导致。
### 解决方案
#### 1. 使用正确的凭证连接MySQL服务器
确保你正在使用的是拥有足够权限的账户,并且输入了正确的用户名和密码登录到 MySQL 数据库。如果忘记了管理员账号(`root`)的初始密码:
- 对于通过包管理器安装的服务端(如Ubuntu),可以尝试停掉服务后用跳过授权表的方式启动数据库;
- 如果是Windows平台下的MySQL,也可以考虑以安全模式启动并重置密码;
对于Linux系统来说,具体步骤如下:
```bash
sudo systemctl stop mysql.service #停止MySQL服务
sudo mysqld_safe --skip-grant-tables & #绕过权限表启动MySQL
```
然后就可以不用密码直接进入命令行工具修改用户的密码了,
```sql
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新设置的强密码!';
# 或者如果你需要创建一个新的超级用户的话,
CREATE USER 'newadmin'@'localhost' IDENTIFIED BY '另一组强壮的新密码';
GRANT ALL PRIVILEGES ON *.* TO 'newadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit; //退出客户端会话
```
最后重启正常的MySQL进程使之生效.
#### 2. 确保有足够的权限来进行授权操作
假如你是通过其他途径获得了一个高权限账户,则需要保证该账户确实具备授予其它用户完全访问控制的权利。你可以先检查现有用户的权限情况:
```sql
SHOW GRANTS FOR CURRENT_USER();
```
如果有问题就按照下面的方式来修复它:
```sql
-- 先切换成有最高权限的角色比如root或者其他已经确认有效的管理者身份
USE mysql ;
UPDATE user SET authentication_string=PASSWORD('新设的安全码') WHERE User='root';
FLUSH PRIVILEGES ;
-- 接着再做一次完整的授予权限动作:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES ;
```
注意: 上述SQL语句里的 PASSWORD() 函数取决于您的 MySQL 版本,在某些较新的版本里已经被移除或不再推荐使用,这时应该采用更合适的身份验证机制,例如:`ALTER USER ... IDENTIFIED BY...`.
此外,针对 `'create user root@'%' identified by '123456';` 这样的需求,建议明确地指明想要添加远程主机上的特定IP地址而非通配符 `%`, 因为后者可能会带来潜在的安全风险。
### 额外提示
尽量避免将 root 用户暴露在外网环境中 (`root@’%‘`). 最佳实践是要建立专门的应用程序专用用户,并限制其只能从指定 IP 地址范围内的机器上进行连接请求。
阅读全文