1、GRANT命令使用说明:
先来看一个例子,创建一个只允许从本地登录的超级用户jack,并允许将权限赋予别的用户,密码为:jack.
mysql> grant all privileges on *.* to ray@'localhost' identified by "123456" with grant option; Query OK, 0 rows affected (0.01 sec)
GRANT命令说明:
ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。
ON 用来指定权限针对哪些库和表。
*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。
TO 表示将权限赋予某个用户。
jack@'localhost' 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY 指定用户的登录密码。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
如果想只让固定IP段的user访问,可以这样写:
mysql> grant all privileges on *.* to ray@'192.168.%' identified by "123456" with grant option; Query OK, 0 rows affected (0.01 sec)
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。
2、刷新权限
使用这个命令使权限生效,尤其是你对那些权限表user、db、host等做了update或者delete更新的时候。以前遇到过使用grant后权限没有更新的情况,只要对权限做了更改就使用FLUSH PRIVILEGES命令来刷新权限。
mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
3、查看权限
查看当前用户的权限: mysql> show grants; +---------------------------------------------------------------------+| Grants for root@localhost |+---------------------------------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION || GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |+---------------------------------------------------------------------+2 rows in set (0.00 sec) 查看某个用户的权限: mysql> show grants for 'jack'@'%'; +-----------------------------------------------------------------------------------------------------+| Grants for jack@% |+-----------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO 'jack'@'%' IDENTIFIED BY PASSWORD '*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0' |+-----------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
4、回收权限
mysql> revoke delete on *.* from 'spider'@'%'; Query OK, 0 rows affected (0.01 sec)
关于回收权限,有可能直接用revoke并不能生效,可以直接删除user表里面的相应数据,再重新赋予权限。
mysql> select user,host from user; +--------+-----------+ | user | host | +--------+-----------+ | fmcm | % | | hive | % | | spider | 10.24.% | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +--------+-----------+ 6 rows in set (0.00 sec) mysql> delete from user where user='spider'; Query OK, 1 row affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> select user,host from user; +--------+-----------+ | user | host | +--------+-----------+ | fmcm | % | | hive | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +--------+-----------+ mysql> show grants for 'spider'; ERROR 1141 (42000): There is no such grant defined for user 'spider' on host '%'
5.修改用户密码
update mysql。user set password=password("新密码") where user="root";
如果直接执行以上sql而且flush之后还是登录不上,报如下错误:
[hadoop@slave4 ~]$ mysql -u spider -p
Enter password:
ERROR 1045 (28000): Access denied for user 'spider'@'localhost' (using password: YES)
有可能是使用grant语句设置密码加密造成的。建议直接删除该用户并重新创建权限。