权限控制机制
四张表: 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'@'%';
来源: http://www.bubuko.com/infodetail-2743391.html