0.引言
数据库安全是系统安全的重中之重,做好数据库安全防护及规范,是系统建设的基础。
今天我们来看看企业生产如何落地数据库安全防护机制。
1. 数据库安全问题
最好数据库安全,我们首先要了解能够威胁数据库安全的问题有哪些:
1、基础设施薄弱
作为数据库的第一层防护,我们的防火墙、网络设备、服务器等基础设施的防护如果不足,那么黑客则能够利用这些薄弱点,来攻击服务器,以获取数据库数据。甚至如果系统的硬盘存在问题,都不需要外部攻击,可能内部使用时就会导致数据损坏。
2、弱认证
数据库访问请求在经过网络层、硬件层的校验后,进入到数据库本身的认证校验中时,如果数据库本身的密码防护不足,也会导致安全问题。这一点也是很多初学者容易出现的问题,3、用户权限未隔离
用户权限不做层级划分,不进行严格的权限分配,这是很多企业内部容易出现的安全问题。有的数据库管理员为了图方便,给每一个开发者都分配了一个最高权限的管理员账号,开发者能够随意更改表结构,调整库信息,这是非常危险的行为。从数据库管理员的职责出发,这样的做法是对企业生产极大的不负责。
4、SQL注入
SQL注入是我们老生常谈的问题了,这一点我们一般在开发层进行防护。随着开发者安全意识的提高以及各类持久层的完备,这类问题倒是越来越少,但并不意味着我们可以不重视它,越是熟悉的地方,反而越容易马虎。5、数据库备份弱加密
数据库连接加密是很多人都会完善的,但是较多企业缺会忽略备份数据的加密或者加密等级不足,也会导致数据的二次泄漏。安全防护在哪一层都容不得马虎。6、数据库未做审计
针对数据库搭建审计系统,这一点依然是不可或缺的。使用审计系统,我们可以监控执行的数据库更新语句,能够在数据更改中加上一层防护。最后一层防止职权的滥用以及针对SQL的检验。很多企业觉得我们企业小,没必要花钱搭建数据库审计系统,但生产数据的安全防护,真的不能有一点马虎,如果企业在这一块的投入有限,但至少将生产环境保护起来,同时现在开源免费的数据库审计软件有很多,所需要投入的无非就是服务器成本和运维成本。如果连这一点都舍不得,那么数据安全的风险你也需要硬着头皮承担。
2. 安全防护措施
在我们了解了数据库安全的风险点后,我们再一一针对这些问题点,来提出我们的防护方案:
2.1 网络硬件安全防护
针对基础硬件的安全防护,这一点不是开发能够关注得到的,一般是由硬件供应商来提供。因此我们就需要关注我们能够触及到的网络层安全防护了。
1、对外暴露时不要使用默认的数据库端口
比如3306,建立内外网端口映射。这样能够降低恶意程序对数据库的攻击准度。
2、网络隔离
通过VLAN、防火墙建立网络环境隔离,将开发环境、测试环境、生产环境区分开来,防止一个环境产生问题而导致的事故蔓延。
针对开发者需要连接上企业服务器进行某些环境部署或者生产排错的,需要搭建堡垒机,并且指定用户禁用某些敏感指令,比如rm,reboot,chown等指令。从根本上扼杀“删库跑路”的可能。
3、防病毒系统
如果你不想让你的服务器裸奔,那么安装防病毒系统必不可少,而选择哪些防病毒系统呢,最方便的解决方案就是联系你的服务器供应商,让他们给你提供完备的解决方案吧。
如果实在预算有限,那么就做好其他方便的防控,严格把控端口开放、权限释放。
4、监控系统
我们需要一个监控系统来帮助我们全天监控服务器情况,发现异常情况马上告知我们,比较早期的zabbix和现在流行的k8s都是不错的选择。
2.2 连接加密
除了网络和硬件层外,连接加密是数据库内部最顶层的保护措施了,设置用户连接数据库的账号及密码,注意密码不可设置的过于简单,最好包含大小写字母、数字、特殊字符,长度不小于8位
针对书写在配置文件中的连接密码,要设置加密,防止二次暴露
2.3 用户权限隔离
这一点是重中之重,权限分层管理,不同的用户、角色设置不同的权限,普通开发人员不给予DDL权限,选择性开放DML权限。
不需要的绝不多开一点权限,权限开通严格执行审批流程。
2.4 视图保护
虽然现在已经不太建议采用视图了,但是针对一些内部对接或者特殊要求,视图依然是一种选择,通过视图可以严格把控输出哪些字段数据,并且针对视图进行赋权,把控哪些用户能够访问哪些视图。以此保障数据安全
2.5 审计系统
审计系统的搭建是小型企业实际生产容易忽略的问题,但是数据库审计系统却是数据安全防护至关重要的一环。除了完备的商业数据库审计软件外,我们还可以选择一些开源的数据库审计软件或插件,比如通过数据库审计插件:Percona Audit Log Plugin、MariaDB Audit Plugin、McAfee MySQL Audit Plugin、htp_audit,还有开源或免费审计软件:yearning、CloudQuery
2.6 防SQL注入
如今多数的web防火墙、数据库防火墙或者一些防护软件能够有效防护SQL注入,但是我们在实际的开发过程中依然要养成避免SQL注入的习惯,比如mybatis中书写中慎用${}
,在程序中书写特殊字符过滤器等。
2.7 数据库备份加密
数据库备份是必不可少的操作,一般我们可以采用mysqldump指令实现。但是备份的数据文件如果不加以严格管理,反而成为一个安全隐患。
针对备份的数据,做好异地储存,同时也要做好储存文件的加密,加密密码不可过于简单。守好安全防护的最后一关。
总结
本期针对数据库安全防护的讲解就到此结束了,本期先针对防护概念做出梳理,下一期我们将讲讲其中一些措施的具体实施