***权限控制机制 **
四张表:user db tables_priv columns_priv privilege特权 mysql<select * from user\G mysql<select * from db\G mysql<select * from tables_priv\G mysql<select * from columns_priv\G 1.用户认证 查看mysql.user表 2.权限认证 以select权限为例: 先看 user表里的select_priv权限 Y 不会接着查看其他的表 拥有查看所有库所有表的权限 N 接着看db表 db
Y 不会接着查看其他的表 拥有查看所有库所有表的权限 N 接着看tables_priv表 tables_priv table_priv: 如果这个字段的值里包括select 拥有查看这张表所有 字段的权限,不会再接着往下看了 table_priv:如果这个字段的值里不包括select,接着查看下张表 还需要有column_priv字段权限

                                                columns_priv 
                                                                column_priv:  有select,则只对某一列有select权限
                                                                         没有则对所有库所有表没有任何权限

db: mysql> insert into db(host,db,user,Select_priv) values("10.18.44.%",'data','ying','Y');

tables_priv: mysql> insert into tables_priv(host,db,user,table_name,table_priv) values('10.18.44.%','data','ying','t1','Select,insert');

columns_priv: mysql> insert into columns_priv(host,db,user,table_name,column_name,column_priv) values('10.18.44.%','data','ying','t1','id','select');

host,db,user,Select_priv host,db,user,table_name,table_priv host,db,user,table_name,column_name,column_priv

刷新权限:两种方式 修改表之后需要刷新权限 方式1: mysql > flush privileges;
方式2: # mysqladmin flush-privileges -u root -p1

五表联动(5.7取消了host表)
user表 登录认证:用户能否进mysql查看user 权限认证:如果能进,看user表的权限有没有,没有就看下一个db表,db表没有看tables_priv,tables_priv没有就去看columns_priv

当db表的host字段为空的时候才会用到host表
db或者host 任何一个select是N,都是没权限

使用命令授权:grant
也可创建新账户(不过后面的版本会移除这个功能,建议使用create user)
语法格式: grant 权限列表 on 库名.表名 to '用户名'@'客户端主机' [identified by '密码' with option参数]; ==权限列表 all 所有权限(不包括授权权限) select,update select(col1), insert(col1,col2) Column level

==数据库.表名	*.*			所有库下的所有表                  Global level
						web.*		web库下的所有表                 Database level
						web.stu_info	web库下的stu_info表   Table level
						
									
==客户端主机				 %							所有主机
									192.168.2.%		    192.168.2.0网段的所有主机
									192.168.2.168		    指定主机
									localhost                指定主机

with_option参数 GRANT OPTION: 授权选项 MAX_QUERIES_PER_HOUR: 定义每小时允许执行的查询数 MAX_UPDATES_PER_HOUR: 定义每小时允许执行的更新数 MAX_CONNECTIONS_PER_HOUR: 定义每小时可以建立的连接数 MAX_USER_CONNECTIONS: 定义单个用户同时可以建立的连接数

mysql> grant select(id),insert(id) on wing.t1 to 'xiaowu'@'172.16.70.%' identified by '123'; mysql> grant select,insert on wing.t1 to 'xiaowu'@'172.16.70.%' identified by '123';
mysql> grant all on wing.t1 to 'xiaowu'@'172.16.70.%' identified by '123';
mysql> grant all on . to 'xiaowu'@'172.16.70.%' identified by '123';
mysql> grant all on . to 'xiaowu'@'172.16.70.%' ; mysql> grant all on . to 'xiaowu'@'%';

查看权限 看自己的权限: SHOW GRANTS\G

看别人的权限:
SHOW GRANTS FOR admin1@'%'\G  

撤销权限:revoke 语法: REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’

mysql> revoke all on *.* from 'xiaowu'@'%';
mysql> revoke delete on *.*  from admin1@’%’;			                        //回收部分权限
REVOKE ALL PRIVILEGES  ON *.*  FROM admin2@’%’;  		                    //回收所有权限
REVOKE ALL PRIVILEGES,GRANT OPTION  ON *.* FROM 'admin2'@'%';