MySQL数据库应用技术及实战
还有其他关于MySQL内容,可以在本头条号查阅。下面开始本篇——在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询过程,很多的查询优化工作实际上就是遵循一些原则让 MySQL 的优化器...
2024.11.07MySQL 访问控制实际上由两个功能模块共同组成,一个是负责“看守 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数据库包含五个主要的授权表。
user表:包含用户帐户和全局权限列。MySQL使用user表来接受或拒绝来自主机的连接。 在user表中授予的权限对MySQL服务器上的所有数据库都有效。db表:包含数据库级权限。MySQL使用数据库表来确定用户可以访问哪个数据库以及哪个主机。在db表中的数据库级授予的特权适用于数据库,所有对象属于该数据库,例如表,触发器,视图,存储过程等。table_priv和columns_priv表:包含表级和列级权限。 在table_priv表中授予的权限适用于表及其列,而在columns_priv表中授予的权限仅适用于表的特定列。procs_priv表:包含存储函数和存储过程的权限。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篇幅有限,关于mysql访问控制实现原理这块的内容就介绍到这里了,假设面试官问你这块内容,一定要做到心中有数,思路是最重要的,觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
还有其他关于MySQL内容,可以在本头条号查阅。下面开始本篇——在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询过程,很多的查询优化工作实际上就是遵循一些原则让 MySQL 的优化器...
2024.11.07MySQL是常用的开源DBMS,因为开源,扩展性好,被广泛使用。在数据分析等实际工作中,由于数据量过大、数据冗余等原因,我们要先对数据库进行清理。要注意的原则有:提前做好数据备份、尽量不动原表格(可以...
2024.11.13概述本文将指导您完成在 SSMS 中成功创建链接服务器以连接到 MySQL 数据库的所有必要步骤。本文分为三个部分:为 MySQL 安装ODBC驱动程序配置 ODBC 驱动程序以连接到 MySQL 数...
2024.11.13MySQL 数据库作发布系统的存储,一天五万条以上的增量, 预计运维三年,怎么优化?1、设计良好的数据库结构, 允许部分数据冗余, 尽量避免 join 查询, 提高效率。2、选择合适的表字段数据类型和...
2024.11.15MySQL数据库属于关系型数据库。SQL是一种用于操作关系型数据库的结构化语言。关系型数据库就是指在关系模型的基础上建立起来的数据库,是一种借助了集合代数等一些数学方法和数学概念处理数据的数据库。My...
2024.11.15