如何理解MySQL服务器安全

60次阅读
没有评论

共计 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 服务器安全

MySQL 数据库安全

账号安全

如何理解 MySQL 服务器安全

账号密码

建议所有的账号都设置 20 位长度,包括数字,大写字母,小写字母以及特殊字符,如 ^N9UxOR ydQWCBvIwqql

账号分离

对于分布式系统来说,会有多个服务,且服务之间存在调用关系,比如交易 trade-service 会调用支付 payment-service。

为了安全起见,给每个服务创建一个数据库,同时分配自己的账号,禁止跨库访问。

如何理解 MySQL 服务器安全

账号权限

保证账号权限最小化原则,对于业务账号来说,只需要授予连接,查询,新增,修改的权限即可。

使用 SSL 连接

对于数据安全性要求比较高的业务,建议启用 SSL 连接,这样即使用抓包工具分析,也不能看到具体的 SQL 文本。但从 SSL 实现方式来看,建立连接时需要进行握手、加密、解密等操作,连接建立阶段比较耗时,如果使用连接池或者长连接不会有太大影响,如果是短连接性能损耗比较大。

系统权限

mysql.user 权限

除了 MySQL root 账号之外,其他任何账号对 mysql.user 的表有修改权限,会带来安全风险:账号密码被修改和认证插件修改。

修改账号密码

如何理解 MySQL 服务器安全

修改密码认证方式

MySQL 默认都是本地密码认证插件  mysql_native_password,如果改成 auth_socket,则不需要密码,只检查用户是否使用 UNIX 套接字进行连接,然后比较用户名即可。

如何理解 MySQL 服务器安全

权限风险

一般允许普通开发人员通过 jumpserver 登录到中转机,然后用 mysql -h -u  - p 以只读账号的方式访问数据库,有时也想看一下 information_schema 下长事务 (innodb_trx) 等相关的信息,需要授予 process 系统管理权限,会带来一些安全隐患。

如何理解 MySQL 服务器安全

这样只读账号也能查看 innodb_trx 表中所有业务账号正在执行的 SQL 语句,SQL 可能包含敏感信息。

如何理解 MySQL 服务器安全

在以前的 MySQL 版本,拥有 process 系统权限的用户还可以锁定系统表,比如 lock table mysql.user  read,导致正常修改用户的操作

FILE 权限

具有 FILE 权限可以将数据通过 SELECT hellip;..INTO OUTFILE hellip;.. 写到服务器上有写权限的目录下,作为文本格式存放,也可以通过 LOAD DATA  INFILE hellip; 将文本文件数据导入到数据表中。

如何理解 MySQL 服务器安全

审计功能

安装 MySQL Server 之后,应该配置和开启 Audit Plugin,这样经过 MySQL Server 执行所有的 SQL   都会被记录下来,一方面可以排除问题,另一方面可以做性能监控分析(例如一段时间内某个 SQL 的 QPS,TPS)。

数据备份

需要定时备份数据文件和 binlog,对于自建 MySQL   服务器,可以使用 xtrabackup 去做每天的物理全备,对于 RDS 来说,需要配置备份策略,同时也要定期的检查的备份完整性和有效性。

如何理解 MySQL 服务器安全

异地容灾

对于核心的业务系统,比如交易,支付等,要做好数据库的异地容灾,避免由于地震等自然灾害造成数据不可恢复。

如何理解 MySQL 服务器安全

数据安全

数据是企业宝贵的资源,每个业务域产生的数据以及需要的数据都不一样,如何保证安全的访问数据是非常重要的,一般大公司都有自己的数据管理平台,比如阿里的 iDB,现在已经是一个服务 DMS(数据管理服务),可以管理各种类型的数据库。

数据访问范化

所有数据变更都应该走审批流程,发起人和审批人不能是同一个,重要敏感的数据操作需要提交工单,进行多级审批,确认没有问题才能执行,执行之前要先做好备份,以便回滚时使用。

建议使用数据库管理平台来管理数据库,一般需要用户注册账号,申请权限(数据导出,结构变更,数据变更),服务 Owner 审批,提交工单进入审批流程等操作,所有的操作环节都会记录操作日志。

如何理解 MySQL 服务器安全

数据脱敏

对核心业务表的敏感字段要进行脱敏处理,例如姓名,邮箱,电话号码,身份证号码,可以利用中间平台去处理,例如阿里云的 DMS 可以配置数据脱敏,支持数据库,表,字段三个级别,默认在平台上查询都是以 * 号显示,如果想要查看明文,需要申请敏感数据权限,并提交工单,审批通过后才可以查看,权限时间默认为一天,最长不超过 7 天。

在做营销活动之前,都会做数据库性能压测,需要把 PROD 数据库全量导入 UAT 环境,会涉及一些敏感数据,一般需要通过中间层做脱敏处理,例如手机号可以前 3 位后 3 位进行打码处理,15222210123 脱敏成 152****123。

如何理解 MySQL 服务器安全

数据加密

从 MySQL  5.7 开始,InnoDB 支持对独立表空间静态数据加密,是引擎内部数据页级别的加密手段,当数据页写入文件系统时加进行加密,从数据文件读到内存中时解密,基于旋转秘钥文件而起作用,对于数据保护非常有用。

如何理解 MySQL 服务器安全

主秘钥文件存储在磁盘上,同时要做好备份,对于加密的表,表空间秘钥由主秘钥并存储在表空间文件的头部中,使用的加密算法是 AES,加密模式是块加密。

我们来看一下 ** 加密 ENCRYPTION= Y 和未加密 ENCRYPTION= N ** 的区别在哪

如何理解 MySQL 服务器安全

如何理解 MySQL 服务器安全

从这里就可以看出,通过 Keyring 的加密方式,主秘钥是存储表空间文件的头部信息中,这样增强了数据文件的安全性,对于一些社交软件产生的聊天消息,可以采用这种方式来加密数据文件,防止数据文件被窃取之后进行恢复。

延迟从库

如何理解 MySQL 服务器安全

Oracle 数据库有两个特性:回收站 (recyclebin) 和闪回 (flashback) 功能,drop  table 如果不加 purge 选项,Oracle 会把这个表 rename 一个新的表名存放到回收站里,需要还原时执行 flashback table 即可。

那如果 delete 能恢复吗?

也是可以的,利用 flashback query 去 Undo  Log 里获取删除时间前的数据,回插到原表即可,这两个功能是很棒的,可惜 MySQL 里都没有。

通常 MySQL 的主从复制是实时的一致性复制,Master 执行的变更会立刻通过 binlog 复制同步到 Slave 执行。

如果不想让 Slave 那么快的执行 Master 的变更,可以配置延迟从库,利用它可以实现数据误删的快速恢复,例如延迟一个小时。

如何理解 MySQL 服务器安全

感谢各位的阅读,以上就是“如何理解 MySQL 服务器安全”的内容了,经过本文的学习后,相信大家对如何理解 MySQL 服务器安全这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计4335字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)