MariaDB用户已获全权限仍提示INSERT命令被拒绝该如何解决
故障排查与解决步骤
你遇到的1142权限报错虽然查询到用户已拥有db库的全量权限,仍可按以下顺序排查解决:
- 确认操作的库与权限匹配
你授予的权限仅针对db库下的所有表,需先确认两点:- 执行INSERT语句前是否已经切换到
db库,可执行use db;命令切换后重试 - INSERT语句中的表是否指定了其他库前缀,若为跨库操作需补充对应库的权限,或调整语句为
INSERT INTOdb.table_nameVALUES(...);
- 执行INSERT语句前是否已经切换到
- 刷新权限缓存
部分旧版本MariaDB授予权限后不会即时生效,使用root账号执行以下命令刷新权限后重试:FLUSH PRIVILEGES; - 确认用户匹配规则
MariaDB的用户权限匹配遵循「最精确优先」原则,你查询的是db_user@localhost(对应本地套接字连接)的权限,若你的连接实际使用127.0.0.1走TCP协议,会匹配其他host规则的用户。可执行以下命令查看所有db_user相关的用户:
若存在其他host(比如SELECT user,host FROM mysql.user WHERE user='db_user';%、127.0.0.1)的同名用户,需要给对应host的用户授予db库的插入权限。 - 检查表级单独回收的权限
若之前单独对目标表执行过权限回收操作,会覆盖库级的全量权限。可执行以下命令查询目标表的单独权限配置:
若查询结果存在且Table_priv列缺少INSERT权限,可单独重新授权:SELECT * FROM mysql.tables_priv WHERE user='db_user' AND host='localhost' AND db='db' AND table_name='table_name';GRANT INSERT ON `db`.`table_name` TO `db_user`@`localhost`; FLUSH PRIVILEGES; - 排查视图、触发器依赖权限
若插入的目标是视图,需要给用户授予视图对应基表的插入权限;若目标表存在触发器,需要确认触发器运行所需的权限已对当前用户开放。
内容的提问来源于stack exchange,提问作者Jamal Hossain
相关产品推荐
相关产品推荐

