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
相关产品推荐
相关产品推荐

