You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中无法为用户分配权限:执行GRANT语句遇1045错误

解决MariaDB中root用户执行GRANT时出现Access Denied的问题

别慌,咱们一步步来搞定这个问题!你遇到的情况是:明明用root账号成功创建了新用户admin,但执行授权语句时却被提示Access denied for user 'root'@'localhost',这大概率是因为当前的root账号本身就没有GRANT OPTION权限,没法给其他用户分配权限;或是MariaDB的权限表在初始化时出了点小问题。

第一步:先确认root用户的权限状态

首先登录MariaDB,执行这条命令看看root的权限详情:

SHOW GRANTS FOR 'root'@'localhost';

如果输出里没有GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;这一行,那就能确定是root本身缺少授权权限了,接下来咱们重置root的权限。

第二步:重置root用户的权限

1. 停止MariaDB服务

根据你的操作系统执行对应的命令:

  • Ubuntu/Debian:
    sudo systemctl stop mariadb
    
  • CentOS/RHEL:
    sudo systemctl stop mariadb
    
  • Windows:打开「服务」找到MariaDB,点击停止。

2. 跳过权限表启动MariaDB

这一步是让MariaDB启动时不加载权限验证,咱们就能无密码登录root账号:

  • Linux/macOS:
    mysqld_safe --skip-grant-tables &
    
  • Windows:找到MariaDB安装目录下的mysqld.exe,在命令行执行:
    mysqld --skip-grant-tables
    

3. 无密码登录MariaDB

打开新的终端/命令行窗口,执行:

mysql -u root

这时候不需要输入密码就能直接进入MariaDB控制台。

4. 更新root的权限并刷新

先切换到权限表所在的mysql数据库:

USE mysql;

然后更新root账号的授权权限:

UPDATE user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root' AND Host = 'localhost';

最后刷新权限,让修改立即生效:

FLUSH PRIVILEGES;

5. 退出并重启MariaDB服务

先退出MariaDB控制台:

EXIT;

然后停止刚才跳过权限表启动的进程,再正常启动MariaDB服务:

  • Linux/macOS:
    sudo systemctl start mariadb
    
  • Windows:回到「服务」里启动MariaDB。

第三步:重新执行授权命令

现在用root账号正常登录MariaDB:

mysql -u root -p

输入密码后,重新执行之前的授权语句:

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

最后记得再刷新一次权限:

FLUSH PRIVILEGES;

这次应该就能成功执行了!

额外注意事项

  • 操作完成后一定要关闭跳过权限表的启动模式,否则数据库会处于无权限验证的危险状态;
  • 如果是新安装的MariaDB,出现这个问题大概率是初始化时权限表没配置正确,上面的方法同样适用;
  • 每次修改权限后,FLUSH PRIVILEGES;是必须的,否则新权限不会立即生效。

内容的提问来源于stack exchange,提问作者Nitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:33:25