MySQL 1045 Access denied 和 1449 The user specified as a definer does not exist 错误处理
MySQL 使用新建用户查询时,如果数据库中有 view,可能会出现这样的错误:
1 | SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'user'@'10.174.68.21' (using password: YES) |
或者
1 | SQLSTATE[HY000]: General error: 1449 The user specified as a definer ('db_prod'@'%') does not exist |
其表现是:
- 涉及到 table 的查询都正常;
- 涉及到 view 的查询都报错。
大多数情况下,出现此问题的根源是view definer设置不当。
查看所有的 definer
可以先检查下所有 view 的 definer。
1 | select DEFINER from information_schema.VIEWS; +---------------------------+ |
可以发现,某些 view 的 definer 为db_prod@% 。
查看view的definer
进而可以查看单个 view 的 definer。
1 | SHOW CREATE VIEW viewname |
创建用户时需要注意的事项
如果 view 的 definer 与当前的用户不一致,可以修改或删除用户。
1 | 删除用户 |
在创建用户时,可以用如下 SQL.
1 | 创建用户 |
关键是保持 DEFINER 和创建用户时的用户名完全一致。
参考资料
MySQL 1045 Access denied 和 1449 The user specified as a definer does not exist 错误处理
https://blog.weixinbook.net/2017/05/31/mysql-1045-access-denied-view-definer.html