MySQL 访问控制实际上由两个功能模块共同组成,一个是负责“看守 MySQL 大门”的用户管理模块,另一个就是负责监控来访者每一个动作的访问控制模块。用户管理模块决定用户是否能登陆数据库,而访问控制模块则决定在数据库中具体可以做的事。下面是一张 MySQL 中实现访问控制的简单流程图。
1. 用户管理
在 MySQL 中,用户访问控制部分的实现比较简单,所有授权用户都存放在一个系统表中:mysql.user,当然这个表不仅仅存放了授权用户的基本信息,还存放有部分细化的权限信息。用户管理模块需要使用的信息很少,主要就是Host,User,Password 这三项,都在 mysql.user 表中
2. 访问控制
当客户端连接通过用户管理模块的验证,可连接上 MySQL Server 之后,就会发送各种Query 和 Command 给 MySQL Server,以实现客户端应用的各种功能。当 MySQL 接收到客户端的请求之后,访问控制模块是需要校验该用户是否满足提交的请求所需要的权限。权限校验过程是从最大范围的权限往最小范围的权限开始依次校验所涉及到的每个对象的每个权限。
在验证所有所需权限的时候,MySQL 首先会查找存储在内存结构中的权限数据,首先查找 Global Level 权限,如果所需权限在 Global Level 都有定义(GRANT 或者 REVOKE),则完成权限校验(通过或者拒绝),如果没有找到所有权限的定义,则会继续往后查找Database Level 权限,进行 Global Level 未定义的所需权限的校验,如果仍然没有能够找到所有所需权限的定义,MySQL 会继续往更小范围的权限定义域查找,也就是 Table Level,最后则是 Column Level 或者 Routine Level。
3. 五个授权表
mysql数据库包含五个主要的授权表。
4. 参考访问授权策略
这里附一份我平时做mysql数据库授权的策略,仅供参考。
- //针对root账号
- set global validate_password_policy=0; --设置判断密码的标准基于密码的长度(validate_password_length)
- grant all privilges on *.* to root@'localhost' identified by 'password';
- grant all privilges on *.* to root@'%' identified by 'password'; --根据具体情况决定是否开启
- //针对日常运维账号
- grant select, insert, update, delete on database_name.* to hwb@'%' identified by 'password';
- grant create,alter,drop,references on database_name.* to hwb@'%';
- grant create temporary tables on database_name.* to hwb@'%';
- grant index on database_name.* to hwb@'%';
- grant create view on database_name.* to hwb@'%';
- grant show view on database_name.* to hwb@'%';
- grant create routine on database_name.* to hwb@'%'; -- 查看存储过程、函数状态
- grant alter routine on database_name.* to hwb@'%'; --删除存储过程、函数
- grant execute on database_name.* to hwb@'%';
- grant all privileges on mysql.* to hwb@'%' identified by 'password'; --不增加不能对其他用户的函数或存储过程做操作
- //针对应用连接账号
- grant all privileges on database_name.* to hwb2@'应用服务器IP' identified by 'password';
- grant all privileges on mysql.* to hwb2@'应用服务器IP'; --不增加无法对其他用户的函数或存储过程做操作
- //针对只读账号(导出数据库权限)
- grant select on database_name.* to hwbread@'%' identified by 'hwbread123';
- grant select on mysql.* to hwbread@'%';
- grant show view on database_name.* to hwbread@'%';
- grant file on *.* to hwbread@'%'; --if database_name.* will ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
HTML中相似的标签和属性的区别详解 文章目录 HTML中相似的标签和属性的区别详解 ...
5月21日腾讯产业互联网沙龙通过腾讯会议线上举办围绕“科技助力中小微企业破局”...
这个问题找了很多网络资源,这里有几个方法,在实验中 复制代码 代码如下: img i...
本文实例讲述了PHP设计模式:组合模式Composite。分享给大家供大家参考,具体如...
甲骨文公司今天宣布,Oracle自治数据库(Oracle Autonomous Database)现可在Exa...
我等卑微的码农,依旧还得唱着“你我皆凡人,生在人世间,终日奔波苦,一刻不得...
本文实例总结了jsp编程常用技巧。分享给大家供大家参考,具体如下: 一、分离下...
在现今互联网企业坐拥着爆炸式数据的信息时代,数据库也层出不穷,来适应不同的...
1、背景 用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2、出现的...
微软于2016年正式终止了其免费的Windows 10升级计划,但如果你符合资格,仍然可...