数据库原理及MySQL应用 | 数据库安全加固

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 数据库安全至关重要,可从多方面对数据库进行加固。

image.png


数据库安全至关重要,可从多方面对数据库进行加固。

数据库安全怎么强调都不过分,可以从以下方面对数据库进行加固,让它更安全。

01、操作系统级别

可从以下七方面实现操作系统级别的安全加固。

1. 使用数据库专用服务器

使用专用的服务器安装MySQL服务,卸载或删除操作系统上的不必要的应用或服务,避免因为其他应用或服务存在安全漏洞给MySQL运行带来的安全风险,这样也能减少服务器的负担,提高性能。

2. 关闭不需要的端口

使用网络扫描工具(如nmap等)扫描服务器端口,检查除了MySQL需要监听的端口(默认为3306)之外,还有哪些端口是打开的,关闭不必要的端口。

3. 不要将数据库和日志文件放在系统分区

系统分区是保存引导文件和系统文件的分区,操作系统运行时,会频繁对系统分区进行读写,也是各种病毒、木马、恶意软件等最关注的地方。例如Windows系统通常是C盘,Linux系统是“/”“/var”“/usr”等,不管是出于安全还是性能上考虑,都不建议将MySQL安装在系统分区,也不要将数据文件和日志文件放在系统分区。

  1. 使用专用的最小权限账号运行数据库进程mysqld

强烈建议使用专用的最小权限账号运行mysqld守护进程,不要用操作系统管理员的身份,提高本地安全性,防止mysqld对本地文件的存取对系统构成威胁。因为任何具有FILE权限的数据库用户都可以利用此账号创建文件,也可以将此账号能访问的任何文件读到数据库表中。

5. 严格管理操作系统账号

严格管理操作系统账号,防止账号信息外泄,尤其是系统管理员和运行mysqld守护进程的账号。配置密码策略,提高密码复杂度,定期更改密码。

6. 不要复用数据库账号

运行MySQL服务的操作系统账号不要用来运行其他应用或服务,避免因其他应用或服务被攻击而给MySQL服务带来的影响。

7. 数据文件夹及日志文件权限控制

合理设置MySQL的数据文件夹以及二进制日志文件、错误日志文件、慢查询日志文件、通用日志文件、审计日志文件等文件的访问权限,确保只有合适的账号拥有合适的权限,防止数据或日志文件被误删除、窃取或破坏。例如,只让运行mysqld守护进程的专用账号拥有完全控制的权限,禁用其他所有用户的读写权限。

02、MySQL级别

可从以下9方面实现MySQL级别的安全加固。

1. 安全安装

MySQL安装完成之后,建议使用mysql_secure_installation工具进行安全性设置,直接在DOS命令提示符窗口运行此命令即可。用此工具可以启用验证密码组件(VALIDATE PASSWORD COMPONENT)、评估密码强度、更改root用户的密码、删除匿名用户、限制root用户只能在本地登录、删除test数据库、重新加载权限表等。

2. 安装最新的补丁

可用“SHOW VARIABLES WHERE Variable_name LIKE "version";”或“SELECT VERSION();”命令查询MySQL的版本,如果有需要安装的补丁包,要及时安装。

3. 密码安全

确保所有用户都使用非空密码,尽量不使用固定密码,每个用户使用不同的密码,若需要将密码保存在特定全局配置文件或脚本中时,可用MySQL自带的用于安全加密登录的工具mysql_config_editor,将密码加密储存,避免直接保存明文密码。另外,还可以根据需要设置以下几方面的内容,增加密码安全性。

1) 密码策略

设置合适级别的密码策略,强制用户的密码符合一定的要求,如密码长度在8位以上,使用数字、大小写、特殊字符等的随机组合。

可以用“SHOW VARIABLES LIKE 'validate_password%';”命令查看当前的密码策略配置,如图11-4所示。其中,validate_password.check_user_name表示是否需要检查用户名;validate_password.dictionary_file表示密码策略文件,只有密码策略强度为STRONG时才需要;validate_password.length表示密码最小长度;validate_password.mixed_case_count表示大小写字符长度,至少1个;validate_password.number_count表示数字至少1个;validate_password.policy表示密码策略强度为MEDIUM,还可以设置为LOW或STRONG;validate_password.special_char_count表示特殊字符至少1个。

image.png


可在MySQL命令提示符窗口,用SET命令进行修改,其基本语法格式如下所示。

image.png


提示

若“SHOW VARIABLES LIKE 'validate_password%';”命令的输出结果为空集,说明没有安装密码验证组件,可在MySQL中运行下面命令安装密码验证组件。

image.png


若想卸载密码验证组件,可在MySQL中运行下面命令。

image.png

2) 密码过期及重用策略

根据需要设定密码过期时间,强制用户定期更改密码,可在全局及每个用户基础上建立密码重用策略,保存已使用过的历史密码,限制重复使用以前的密码。

3) 密码认证机制

尽量采用新的密码认证机制。MySQL不断加固数据库的安全性,在MySQL 8.0中将之前的mysql_native_password机制,升级到新的caching_sha2_password。

mysql_native_password是MySQL 5.6、5.7默认的密码认证机制。当用户连接MySQL实例时,通过challenge-response的密码校验机制进行认证,使用SHA1哈希算法进行认证校验,并将用户的密码通过SHA1(SHA1(password))两次哈希计算,保存在表“mysql.user”的列authentication_string中,但相同的密码必然会有相同的哈希值,而且随着时间的推移,SHA1哈希算法也已经变得比较容易破解了。

cache_sha2_password是MySQL 8.0默认的密码认证机制,它进行了如下几个方面的改进。

(1) 哈希算法升级为更为安全的SHA256算法,哈希算法的round次数从原来的2次,提升为5000次,round次数越多,每次计算哈希值的代价越大,破解难度也就越大。

(2) 保存在列authentication_string中的哈希值为加盐(salt)后的值,这样就算两个不同用户的密码相同,保存在mysql.user表中的哈希值也不同。

(3) 用TLS加密或RSA密钥传输方式从客户端将密码传送到服务端。

4. 用户安全

建立不同类型的用户账号,如超级管理员账号、系统应用账号(实现备份、监控、审计等)、应用业务账号、业务人员账号、开发人员账号、测试人员账号、其他专用账号等,并制定相应的命名规则。

用户根据密码策略设置符合要求的密码,保护好自己的账号密码,防止泄露,非必要人员不需要知道账号的名称,尤其要控制可以访问所有数据库的账号。

对于不必要的用户,可以先禁用,后删除,做到无匿名账户和无废弃账户。

5. 权限安全

熟悉MySQL的权限系统,了解权限表中的每个权限,遵循最小权限原则,业务需要什么给什么,而不是直接给每个用户分配所有权限。坚持最小权限,是数据库安全的重要步骤。

以下几个是比较特殊的权限,应确保只有数据库管理员才能拥有。

(1) FILE:表示是否允许用户读取数据库所在主机的本地文件。

(2) PROCESS:表示是否允许用户查询所有用户的命令执行信息。

(3) SUPER:表示用户是否有设置全局变量、管理员调试等高级别权限。

(4) SHUTDOWN:表示用户是否可以关闭MySQL服务。

(5) CREATE_USER:表示用户是否可以创建或删除其他用户。

(6) GRANT:表示用户是否可以修改其他用户的权限。

另外,要合理控制DDL和DML语句的授权。因为它们会导致数据库结构或数据发生变化,在任何数据库中都要控制用户的此类权限,确保只授权给有业务需求的非管理员用户。

6. 端口安全

MySQL默认端口是3306,如果条件允许,建议定期修改。

7. 连接访问安全

使用专门主机与数据库连接,创建用户时指定主机信息,确保访问数据库的主机为已知用户或主机,把非法请求阻止在数据库以外。对已经连接的IP网段进行规范化、统一化的管理,定期进行权限复核操作,对系统所属IP、用户进行权限梳理工作。

严禁开启外网访问,尽可能禁止远程网络连接,防止猜解密码攻击、溢出攻击和嗅探攻击。如果客户端在外网,不应该直接访问数据库,而是使用中间件堡垒机或其他替代方案。

有些连入数据库的应用程序存在后门,会造成数据库安全隐患,为此要检查所有连接数据库程序的安全性。

8. 限制LOCAL INFILE/OUTFILE

禁用或限制LOCAL INFILE/OUTFILE,防止造成任意文件读取或webshell写出,防止非授权用户访问本地文件。可以在MySQL的配置文件my.ini中设置“Local-infile=0”“secure_file_priv=NULL”“secure_file_priv=指定目录”来禁用或限制通过文件实现数据的导入和导出。

9. 日志审计加固

根据需要启用二进制日志、错误日志、通用查询日志、慢查询日志等日志,监控数据库的运行状态,查询出错原因,进行数据恢复,优化数据库性能等。对重要业务表的所有行为,最好全部审计。

MySQL 8.0对于安全做了很多层的加固,除了以上提到的,还有InnoDB表空间加密、InnoDB redo/undo加密、二进制日志加密等

03、网络级别

可从以下两方面在网络级别实现对MySQL安全的加固。

1. 使用SSL或X509加密连接

如果对数据保密要求非常严格,或MySQL数据库服务器与应用是跨信任域部署的,则需要考虑在数据库服务器与应用服务器之间建立SSL或X509加密通道,将传输数据进行加密。

2. 限定网络

数据库应该只对应用程序服务器开放,不要将其开放给整个网络,通过防火墙或其他白名单和中间件白名单过滤机制,限制对MySQL端口的访问。

最后需要强调的是,人才是安全的主导,最好根据具体情况制定详细的规章制度,对员工进行安全培训,增强员工的系统安全观念,做到细心操作,安全操作。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
26 0
|
17天前
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
68 0
|
14天前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
MySQL主从复制原理和使用
|
1月前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
46 5
Mysql(3)—数据库相关概念及工作原理
|
8天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
22 2
|
30天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1610 14
|
14天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
23天前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
23天前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
52 1
|
1月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
92 5