Cause: java.sql.SQLSyntaxErrorException: TRIGGER command denied to user 'abcd'@'%' for table 'user'
场景如下:最近公司生产数据库有做过调整,然而数据库里user这张表里的一个字段是有触发器的,以前创建这个触发器的人是有对数据库进行读写权限的,但是现在这个触发器的定义者被人改了,改成了一个只有读权限,没有写权限的账户了。然后不管我们登录是用的root账户,或者其它有读写权限的账户,但是只要我们业务有涉及到改user里面有触发器的那个字段时,便会报上面的错误。这是因为触发器执行时,会去根据触发器的创建者的权限进行相关触发造作,比如改数据库的数据,但是这个触发器的创建者又没有写权限,那么就会报权限不足的错误,也就是上面所说的错误了。所以解决办法是将这个触发器的创建者改成有读写权限的账户就行了。
可以通过 show trigger 查看数据库的所有触发器,其中Definer便是创建者。
![](https://img-blog.csdnimg.cn/img_convert/1fb8c53bd2b66a4326a4b90911b001c1.png)
然后可以执行 select * from mysql.user where user='abcd'; 这句sql查看abcd这个用户的权限。
参照:
记一次触发器定义者不同导致的sql异常TRIGGER command denied to user 'XXX' @'%' for table '...