根据报错信息,确定报错在函数replace_db_table里面,调用栈如下
报错条件是如下,操作是revoke,且mysql.db中找不到对应权限
grant select on *.* to 'xx1'@'localhost'
调用栈如下
只修改了mysql.user表 而revoke select * test.* from 'xx1'@'localhost'
需要删除mysql.db表中相应记录,所以会报错
修改mysql.user表 grant/revoke privilege on db.*
修改mysql.db表 修改mysql.table表 三种操作互不影响,赋予一个用户大粒度的权限,并不能收回小粒度的权限
执行drop user操作后,会调用sql/sql_acl.cc:handle_grant_data修改上述三个表中,所有与被drop用户相关的记录