共计 4335 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章主要讲解了“如何理解 MySQL 服务器安全”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“如何理解 MySQL 服务器安全”吧!
MySQL 服务器安全
对于自建机房的 MySQL 服务器安装都会经历网络配置,存储规划,安装服务器以,安装 MySQL。
存储安全
自建 MySQL 服务器
对于自建 MySQL 服务器来说,为了磁盘不出现单点故障,一般都会使用 RAID 磁盘冗余阵列的方式。
有两种模式:硬件 RAID 和软件 RAID,硬件 RAID 需要购买 RAID 卡支撑,软件 RAID 通过软件包 mdadm 生成即可,生产环境建议选择硬件 RAID,一般需要对多块盘先做 RAID,对于数据库服务器来说,通常选择 RAID10(也称为 RAID 1 + 0,先进行镜像 RAID1,再进行条带化 RAID0 存储),读写性能都比较好。
在实际的生产环境,一般都会有 8 块盘,每块盘 800G,在服务器启动的时候,先做磁盘 RAID 划分,通?;至礁鼍碜?volume group),一个是操作系统内置目录使用 rootvg,一个就是 MySQL 的数据相关的卷组 datavg,LVM 操作主要的步骤如图:
通过以上的存储划分及配置 RAID10,MySQL 产生的数据都会写到 /data 目录下,同步到逻辑卷 lvdata 中,进而同步到物理卷中,最终同步到物理磁盘中镜像存储,有效避免了单盘损坏导致的数据不可用。
公有云 RDS
对于 RDS 来说,线上环境一般都选择高可用版,即一主一从模式,默认情况下 Slave 只做 failover(故障切换),主要是由于 Master 和 Slave 服务器的磁盘没有做 RAID。
网络安全
设置白名单
对于自建机房,一般都会使用硬件防火墙来做网络隔离以及 IP 白名单限制,只允许指定的应用服务器通过 3306 端口连接 MySQL Server,其他的恶意请求应该在防火墙层面进行拦截,例如 RDS 控制台的数据安全可以添加指定 IP。
外网访问
数据库服务器只需要内网访问,禁止开通外网地址或者公网地址。
操作系统安全
安装完操作系统 (例如 CentOS 7.4) 后,要进行安全漏洞扫描及定期巡检,主要有以下几个方面需要注意:
root 启动 MySQL
MySQL Server 安装完之后,如果用 root 启动 MySQL,则任何具有 FILE 系统权限的用户都可以读写 root 用户下的文件,会造成严重的安全隐患,应该将软件目录属主设置成 root 用户,数据目录属主设置成 mysql 用户,使用 mysql 用户启动 MySQL 实例。
账号弱密码
Linux 服务器的所有账号密码不能是弱密码(例如密码是纯数字,纯字母,账号的一部分等,长度太短),建议所有的账号都设置 20 位长度,包括数字,大写字母,小写字母以及特殊字符。
对外开放端口
对于 MySQL 数据库服务器,除了 3306 端口开发给指定的应用服务器访问外,其他的端口都应该禁用掉,例如 ssh,ftp,telent 服务端口。
服务漏洞
在用绿盟或者其他工具进行安全扫描时,都会发现一些系统漏洞,常见的有 ntp 漏洞,vsftpd 的漏洞等。这时就需要?;ゴ?patch 修复,再次进行扫描,直到全部通过才能安装 MySQL。
密码登录
对于生产服务器,严禁本地通过密码直接登录,建议采用跳板机 jumpserver 的方式,每个用户都用自己 jumpserver 账号去登录,然后选择自己要访问的服务器 (需要提前告知管理员添加),默认的登录用户(例如 server 用户) 只有只读权限,不能做任何修改操作。
审计功能
用户通过 jumpserver 登录到生产服务器的所有操作都应该被审计和录屏,并且定时回放这些操作,确认每一步都是最优的,没有不必要的多操作。
操作命令历史
用户登录到 Linux 服务器上的所有操作命令都会记录到 history 中,将 history 设置大一点,保存更多的操作命令记录。
资源限制
通过配置 /etc/security/limits.conf 文件限制用户资源使用,例如打开进程数,文件数,文件大小及内存等。
服务器备份
定期的对服务器进行备份,备份内容主要包括 Linux 内置目录 (/usr /var /lib) 和 MySQL 数据目录(数据文件,binlog,undolog,redolog),同时要定期检查备份的有效性以及恢复演练,以下是阿里云 ECS 的快照,建议每天一个快照,保留 7 天。
MySQL 数据库安全
账号安全
账号密码
建议所有的账号都设置 20 位长度,包括数字,大写字母,小写字母以及特殊字符,如 ^N9UxOR ydQWCBvIwqql
账号分离
对于分布式系统来说,会有多个服务,且服务之间存在调用关系,比如交易 trade-service 会调用支付 payment-service。
为了安全起见,给每个服务创建一个数据库,同时分配自己的账号,禁止跨库访问。
账号权限
保证账号权限最小化原则,对于业务账号来说,只需要授予连接,查询,新增,修改的权限即可。
使用 SSL 连接
对于数据安全性要求比较高的业务,建议启用 SSL 连接,这样即使用抓包工具分析,也不能看到具体的 SQL 文本。但从 SSL 实现方式来看,建立连接时需要进行握手、加密、解密等操作,连接建立阶段比较耗时,如果使用连接池或者长连接不会有太大影响,如果是短连接性能损耗比较大。
系统权限
mysql.user 权限
除了 MySQL root 账号之外,其他任何账号对 mysql.user 的表有修改权限,会带来安全风险:账号密码被修改和认证插件修改。
修改账号密码
修改密码认证方式
MySQL 默认都是本地密码认证插件 mysql_native_password,如果改成 auth_socket,则不需要密码,只检查用户是否使用 UNIX 套接字进行连接,然后比较用户名即可。
权限风险
一般允许普通开发人员通过 jumpserver 登录到中转机,然后用 mysql -h -u - p 以只读账号的方式访问数据库,有时也想看一下 information_schema 下长事务 (innodb_trx) 等相关的信息,需要授予 process 系统管理权限,会带来一些安全隐患。
这样只读账号也能查看 innodb_trx 表中所有业务账号正在执行的 SQL 语句,SQL 可能包含敏感信息。
在以前的 MySQL 版本,拥有 process 系统权限的用户还可以锁定系统表,比如 lock table mysql.user read,导致正常修改用户的操作
FILE 权限
具有 FILE 权限可以将数据通过 SELECT hellip;..INTO OUTFILE hellip;.. 写到服务器上有写权限的目录下,作为文本格式存放,也可以通过 LOAD DATA INFILE hellip; 将文本文件数据导入到数据表中。
审计功能
安装 MySQL Server 之后,应该配置和开启 Audit Plugin,这样经过 MySQL Server 执行所有的 SQL 都会被记录下来,一方面可以排除问题,另一方面可以做性能监控分析(例如一段时间内某个 SQL 的 QPS,TPS)。
数据备份
需要定时备份数据文件和 binlog,对于自建 MySQL 服务器,可以使用 xtrabackup 去做每天的物理全备,对于 RDS 来说,需要配置备份策略,同时也要定期的检查的备份完整性和有效性。
异地容灾
对于核心的业务系统,比如交易,支付等,要做好数据库的异地容灾,避免由于地震等自然灾害造成数据不可恢复。
数据安全
数据是企业宝贵的资源,每个业务域产生的数据以及需要的数据都不一样,如何保证安全的访问数据是非常重要的,一般大公司都有自己的数据管理平台,比如阿里的 iDB,现在已经是一个服务 DMS(数据管理服务),可以管理各种类型的数据库。
数据访问范化
所有数据变更都应该走审批流程,发起人和审批人不能是同一个,重要敏感的数据操作需要提交工单,进行多级审批,确认没有问题才能执行,执行之前要先做好备份,以便回滚时使用。
建议使用数据库管理平台来管理数据库,一般需要用户注册账号,申请权限(数据导出,结构变更,数据变更),服务 Owner 审批,提交工单进入审批流程等操作,所有的操作环节都会记录操作日志。
数据脱敏
对核心业务表的敏感字段要进行脱敏处理,例如姓名,邮箱,电话号码,身份证号码,可以利用中间平台去处理,例如阿里云的 DMS 可以配置数据脱敏,支持数据库,表,字段三个级别,默认在平台上查询都是以 * 号显示,如果想要查看明文,需要申请敏感数据权限,并提交工单,审批通过后才可以查看,权限时间默认为一天,最长不超过 7 天。
在做营销活动之前,都会做数据库性能压测,需要把 PROD 数据库全量导入 UAT 环境,会涉及一些敏感数据,一般需要通过中间层做脱敏处理,例如手机号可以前 3 位后 3 位进行打码处理,15222210123 脱敏成 152****123。
数据加密
从 MySQL 5.7 开始,InnoDB 支持对独立表空间静态数据加密,是引擎内部数据页级别的加密手段,当数据页写入文件系统时加进行加密,从数据文件读到内存中时解密,基于旋转秘钥文件而起作用,对于数据?;し浅S杏?。
主秘钥文件存储在磁盘上,同时要做好备份,对于加密的表,表空间秘钥由主秘钥并存储在表空间文件的头部中,使用的加密算法是 AES,加密模式是块加密。
我们来看一下 ** 加密 ENCRYPTION= Y 和未加密 ENCRYPTION= N ** 的区别在哪
从这里就可以看出,通过 Keyring 的加密方式,主秘钥是存储表空间文件的头部信息中,这样增强了数据文件的安全性,对于一些社交软件产生的聊天消息,可以采用这种方式来加密数据文件,防止数据文件被窃取之后进行恢复。
延迟从库
Oracle 数据库有两个特性:回收站 (recyclebin) 和闪回 (flashback) 功能,drop table 如果不加 purge 选项,Oracle 会把这个表 rename 一个新的表名存放到回收站里,需要还原时执行 flashback table 即可。
那如果 delete 能恢复吗?
也是可以的,利用 flashback query 去 Undo Log 里获取删除时间前的数据,回插到原表即可,这两个功能是很棒的,可惜 MySQL 里都没有。
通常 MySQL 的主从复制是实时的一致性复制,Master 执行的变更会立刻通过 binlog 复制同步到 Slave 执行。
如果不想让 Slave 那么快的执行 Master 的变更,可以配置延迟从库,利用它可以实现数据误删的快速恢复,例如延迟一个小时。
感谢各位的阅读,以上就是“如何理解 MySQL 服务器安全”的内容了,经过本文的学习后,相信大家对如何理解 MySQL 服务器安全这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!