MySQL数据库(十):用户授权与撤销授权

前言:
1.mysql数据库服务在不授权的情况下,只允许数据库管理员从数据库服务器本机登陆.
2.系统管理员才有修改数据库管理员密码的权限.

一、用户授权(grant)
默认只有数据库管理员从数据库服务器本机登陆才有授权权限

1.授权命令格式:
1.1从客户端登陆的时候不需要密码

grant 权限列表  on 数据库名 to 用户名@"客户端地址";

1.2 授权用户可以从网络中的任意地址登陆到mysql server服务器

grant 权限列表 on 数据库名 to 用户名;

1.3 设置授权用户连接mysql server服务器时候的密码和授权权限

grant 权限列表 on  数据库名  to  用户名@"客户端地址" identified by "密码" with grant option;

identified by "密码" :从客户端登陆的时候需要密码(可选项,若不指定,授权用户登陆时没有密码)
with grant option :授权用户从客户端地址登陆之后有授权的权限(可选项,让授权用户有授权权限,若不设置,授权用户无授权权限)

2.条件的表示方法
1.1 权限列表的表示

usage:无权限
all  :所有权限
insert:插入
update:更新(可以指定只更新某个字段update(name,age))
delete:删除

1.2数据库名的表示方式

*.*   库.表:所有库所有表
数据库名.*:对数据库中的所有表(某个库)
数据库名.表名:某个表

注:授权使用的库可以不用事先存在

1.3用户名的表示方式
注:授权时自定义,要有表示性,信息存储在mysql库中的user表中

1.4客户端地址的表示方式(可选项,不设置时,匹配所有地址)

%    所有地址
192.168.4.%   某个网段
192.168.4.205  某个IP

pc1.tarena.com  主机名
%.tarena.com   某个区域

注:工作中一般都是用ip地址来表示客户端地址

例子:
授权root用户从192.168.4.205使用后123456密码连接,并且有授权权限。

mysql> grant all on *.* to root@"192.168.4.205" identified by "123456" with grant option;
Query OK, 0 rows affected (0.00 sec)

3.关于授权的其他命令

1.1 查看自己的权限

show grants;

1.2 显示当前登陆的用户是谁

select user();

4.授权信息的存放位置
服务器端使用 mysql库存储授权信息
授权信息保存在mysql下不同表里,不同的授权信息使用不用的表保存.

1.1 user表
保存授权用户的授权信息

例如:
查看webuser用户的授权信息

mysql> select * from mysql.user where user="webuser"\G;
*************************** 1. row ***************************
                  Host: %
                  User: webuser
              Password: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: Y
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string: 
      password_expired: N
1 row in set (0.00 sec)

ERROR: 
No query specified

查看用户root从192.168.4.205的登陆权限

mysql> show grants for root@"192.168.4.205"\G;
*************************** 1. row ***************************
Grants for root@192.168.4.205: GRANT SELECT, INSERT, UPDATE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'root'@'192.168.4.205'
1 row in set (0.00 sec)

ERROR: 
No query specified

1.2 db表
记录授权用户对库的权限信息
例如:
查看webuser用户数据库的权限信息

mysql> select * from mysql.db where user="webuser"\G;
*************************** 1. row ***************************
                 Host: %
                   Db: bbsdb
                 User: webuser
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
         Execute_priv: Y
           Event_priv: Y
         Trigger_priv: Y
1 row in set (0.00 sec)

ERROR: 
No query specified

1.3 tables_priv表
记录授权用户对表的权限信息
例如:
查询webuser用户的表权限信息

mysql> select * from mysql.tables_priv where user="webuser";
Empty set (0.00 sec)

1.4 columns_priv
记录授权用户对表中某个字段的权限信息
例如:
查看webuser用户的字段权限信息

mysql> select * from mysql.columns_priv where user="webuser";
Empty set (0.00 sec)

*注:如果想要一个用户有授权权限的话,需要让此用户对mysql库有权限

5.授权用户如何重置/修改登录密码

格式:

set password=password("密码");

例如:
数据库管理员重置授权用户的登陆密码

set password for 用户名@"客户端地址"=password("新密码");

二、权限撤销(revoke)

1.命令格式:

revoke  权限列表  on  数据库 from  用户名@"客户端地址";

注意:撤销的时候,只有对数据库有过授权的才可以撤销

2.条件的表示方法
*权限列表、数据库名、用户名、客户端地址的表示方法和授权时候的表示方式是一样的

例子:

1.1 撤销管理员用户从客户端192.168.4.205 登陆后,对所有库里所有表中记录的删除权限

revoke delete on *.* from root@"192.168.4.205";

1.2 撤销root@192.168.4.205的登陆权限

delete from mysql.user where user="root" and host="192.168.4.205";

1.3 撤销所有权限

revoke all on *.* from root@"192.168.4.205";

1.4 撤销授权权限

revoke grant option on *.* from roo@192.168.4.205;