公司本地测试数据库一直使用root直接使用数据库,一直使用没问题
突然有一天,需要增加一个用户,并使用该用户进行操作数据库
在成功创建新用户后,开始想给用户授予最高权限,结果报错,1044 access denied for user root
我以为是无法创建同样的root用户
于是建了一个新数据库,newdb ,单独个新建用户增加newdb的权限,还是报错
最后,查看了一下,root自己的服务器权限,除了Grant option外其他权限都有,问题应该就在这里
解决办法:登录mysql服务器,本地登录Mysql
执行命令:
1、 mysql -uroot -p
2、 usemysql
3、UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
4、 FLUSH PRIVILEGES;
一、用户授权
mysql> grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option;
添加权限(和已有权限合并,不会覆盖已有权限)
GRANT Insert ON `your database`.* TO `user`@`host`;
删除权限
REVOKE Delete ON `your database`.* FROM `user`@`host`;
all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录
identified by:指定用户的登录密码
with grant option:表示允许用户将自己的权限授权给其它用户
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。
用户详情的权限列表请参考MySQL官网说明:http://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
二、刷新权限
对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。
mysql> flush privileges;
三、查看用户权限
mysql> grant select,create,drop,update,alter on *.* to 'yangxin'@'localhost' identified by 'yangxin0917' with grant option;
mysql> show grants for 'yangxin'@'localhost';
四、回收权限
删除yangxin这个用户的create权限,该用户将不能创建数据库和表。
mysql> revoke create on *.* from 'yangxin@localhost';
mysql> flush privileges;