2017年架构师最重要的48个小时 | 8折倒计时
MySQL 的权限表在数据库启动的时刻就载入内存,当用户经由过程身份认证后,就在内存中进行响应权限的存取,如许,此用户就可以在数据库中做权限范围内的各类操作了。
一、权限表的存取
在权限存取的两个过程中,体系会用到 “mysql” 数据库(安装 MySQL 时被创建,数据库名称叫“mysql”) 中 user、host 和 db 这3个最重要的权限表。
在这 3 个表中,最重要的表示 user 表,其次是 db 表,host 表在大年夜多半情况下并不应用。
user 中的列重要分为 4 个部分:用户列、权限列、安然列和资本控制列。
平日用的最多的是用户列和权限列,个中权限列又分为通俗权限和治理权限。通俗权限用于数据库的操作,比如 select_priv、super_priv 等。
当用户进行连接时,权限表的存取过程有以下两个过程:
- 先大年夜 user 表中的 host、user 和 password 这 3 个字段中断定连接的 IP、用户名、和暗码是否存在于表中,如不雅存在,则经由过程身份验证,不然拒绝连接。
- 如不雅经由过程身份验证、则按照以下权限表的次序获得数据库权限:user -> db -> tables_priv -> columns_priv。
在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。膳绫擎的第一阶段好懂得,下面以一个例子来具体解释一下第二阶段。
为了便利测试,须要修改变量 sql_mode
- // sql_mode 默认值中有 NO_AUTO_CREATE_USER (防止GRANT主动创建新用户,除非还指定了暗码)
- SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
1. 创建用户 zj@localhost,并付与所稀有据库上的所有表的 select 权限
- MySQL [mysql]> grant select on *.* to zj@localhost;
- Query OK, 0 rows affected, 2 warnings (0.00 sec)
- MySQL [mysql]> select * from user where user="zj" and host='localhost' \G;
- *************************** 1. row ***************************
- Host: localhost
- User: zj
- Select_priv: Y
- Insert_priv: N
- Update_priv: N
- Delete_priv: N
- Create_priv: N
- Drop_priv: N
- Reload_priv: N
- ...
2. 查看 db 表
- MySQL [mysql]> select * from db where user='zj' \G ;
推荐阅读
2017年架构师最重要的48个小时 | 8折倒计时 自负年夜2015年我国大年夜力开展“宽带中国”专项行动后>>>详细阅读
本文标题:带您深入了解MySQL的权限管理
地址:http://www.17bianji.com/lsqh/38307.html
1/2 1