一、mysql权限详解

1、权限组成结构:
    用户:权限的主体,一个用户拥有自己的用户名和密码,并拥有能够操作的权限;
    操作权限:限制一个用户能够做什么事情,在MySQL中,操作权限可以配置到全局/数据库/表/列上;
-------------------------------------------------------------------
2、权限的分布:
    使用Navicat工具操作:

3、权限分布:针对不同的对象能够设置哪些权限;
    全局:   针对于所有的数据库都有效.
    数据库:只针对于当前数据库有效,其他数据库无效.
    表权限:'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'
    列权限:'Select', 'Insert', 'Update', 'References'
    过程权限:'Execute', 'Alter Routine', 'Grant'

*references:操作外键
--------------------------------------------------------
4、用户表中介绍
--------------------------------------------------------
    MySQL中权限的设置也是存储在数据库中的:
    mysql.user:用户表,包括用户名,密码,主机,全局权限,性能限制;
    mysql.db:数据库权限设置;
    mysql.table_priv:表权限设置;
    mysql.column_priv:列权限设置;

mysql 级联复制应用场景 mysql级联收回权限_mysql

二、权限命令

权限相关命令:
    MySQL中用于赋权限的命令是GRANT,语法为:
    完整语法:
    GRANT 权限 (columns)
    ON 数据库对象
    TO 用户 IDENTIFIED BY "密码"
    WITH GRANT OPTION
-------------------------------------------------------------------

三种具体的语法:
    1.给一个存在用户赋予权限:
     语法1:GRANT 权限 (columns) ON 数据库对象 TO 用户: 
      赋予choi账户:SELECT和INSERT权限.
      GRANT select,insert ON *.* TO choi@localhost;
    2.创建用户,设置密码,赋予权限:
      语法2:GRANT 权限 (columns) ON 数据库对象 TO 用户 IDENTIFIED BY "密码"
    3.创建lucy用户:
       GRANT ALL ON *.* TO lucy@localhost IDENTIFIED BY '1234';
    4.创建用户,设置密码,赋予权限,并且该用户可以继续授权给其他用户:
      语法3:GRANT 权限 (columns) ON 数据库对象 TO 用户 IDENTIFIED BY "密码" WITH GRANT OPTION

三、授权示例

    GRANT ALL PRIVILEGES ON *.* TO choi@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
    创建一个超级管理员,用户名为choi,密码为1234,只能在localhost登陆;可以给别人授权;

    其中:
    1,ALL PRIVILEGES即代表所有权限;
    2,*.*:所有数据库对象。普通格式为db.table,比如test.*;
    3,will@'localhost':admin用户,只能在本机访问。
         ①用户账户包括user@host;
         ②host为
             %:从任意地址访问;
             10.250.7.%:只能从指定网段访问;
             192.168.1.2:只能从某个IP访问;
    4,WITH GRANT OPTION:是否允许用户继续授权(注意,这个用户能够授权只能是该用户的权限子集)
    5,注意,在授权操作之后,使用flush privileges命令刷新权限;

四、其他相关权限操作

    查看当前用户的权限:
    show grants;

    查看特定用户的权限:
    show grants for root@localhost
    --------------------------------------------------------------------------
    使用REVOKE命令回收对用户的授权:

    REVOKE 权限 ON 数据库对象 FROM 用户;
    如:赋予will用户所有的权限之后,再回收用户will所有的权限.
    赋予权限:GRANT all ON *.* TO will@'%';
    回收权限:REVOKE all ON *.* FROM will@'%';

    注意:使用REVOKE撤销全部权限,操作者必须拥有MySQLl数据库的全局CREATE USER权限或UPDATE权限;
    --------------------------------------------------------------------------
    删除用户:DROP USER 用户名称
    注意,user必须包括user@host;
    如:DROP USER will@'%';