【问题背景】用root用户创建用户的时候,报错ERROR 1044 (42000)
mysql> grant select on *.* to rep@'%' identified by '123'; |
以下是整个问题的分析和解决过程:
【1】确定当前的登录用户,避免出现当前登录的用户(http://blog.itpub.net/12679300/viewspace-1453490/)
mysql> select current_user(); |
说明:当前用户没有问题;
【2】查看当前用户的权限:show grants for root@'%' ;
mysql> show grants for root@'%' ; +---------------------------------------------------------------------------------------------------------------------------------------------------------+ |
说明:当前用户具有所有的权限;
【3】查看用户的授权权限
mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user; |
说明:当前用户'root'@'%' Grant_priv的权限状态为"N",说明当前用户没有权限授权;
【4】解决方法:UPDATE mysql.user SET Grant_priv='Y' WHERE User='root';
【5】现在可以进行用户的创建和授权了
mysql> grant select on *.* to rep@'%' identified by '123'; |
【总结】其实整个过程就是MySQL的权限问题,当前用户具有Super_priv的权限,但是并没有Grant_priv的权限,所以导致root@‘%’用户在进行授权的时候报错了;
MySQL的权限控制是一个很有趣的问题,后续有时间的话,再整理和大家分享。
........................................................................................................................................................................
本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。
ORACLE技术博客:猎人笔记 数据库技术群:367875324 (请备注数据库类型)
........................................................................................................................................................................