ERROR 1143 (42000): SELECT command denied to user

同事要update   MySQL  UAT 环境的基础数据表,发出了这样的授权申请语句。觉得没什么问题,也就给批准了。

你能看出这个授权语句有什么问题吗?e1534 这个用户已经存在,并且可以连接上这个库。

GRANT INSERT, UPDATE ,DELETE ON `adm`.`t_code` TO 'e1534'@'192.80.176.100';

 

但他在更新的时候报了如下错误:

mysql> update t_code set name='b' where id =1;
ERROR 1143 (42000): SELECT command denied to user 'e1534'@'192.80.176.100' for column 'id' in table 't_code'

 

为什么呢,因为他在update语句中用到了where条件,但它申请的授权语句中却没有对这张的select权限。

在mysql中如果只申请了对表的update,delete权限的时候,那么在update和delete的语句中就不能出现where子句,否则就会遇到上述错误。

如果只有对表的update权限是可以进行全表更新的,但这样的操作在生产环境几乎是不被允许的(特殊情况除外).

mysql> update  t_code set name='b' ;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

要解决这个问题,还要给update的表,授予select的权限。

mysql>GRANT SELECT ON `adm`.`t_code` TO 'e1534'@'192.80.176.100';

 

所以在给MySQL 用户授权的时候,不但要检查授权的语句是否正确,还要看要执行的sql到底需要什么权限。而不是单独审核。

 

 

 

 

 

你可能感兴趣的:(MySQL)