Mysql之权限管理

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语句设置密码加密造成的。建议直接删除该用户并重新创建权限。

你可能感兴趣的:(Mysql之权限管理)