|
原文链接:网络安全攻防:数据库安全
数据库安全有两个方面:一是数据库物理安全,指的是运行数据库的服务器、传输数据的线路等设备的正常运行,不被外力破坏、不因网络拥塞而不可用、预防因元器件老化而造成损失;二是数据库逻辑安全,数据库中最重要的是数据,要保证数据不因黑客入侵而丢失或泄露,不因程序崩溃而损坏,数据存储方式合理有序,存取方便快捷。
对数据的安全保障包括几个方面,分别为数据独立性、数据安全性、数据完整性、并发控制、故障恢复等。
数据独立性包括物理独立性和逻辑独立性两个方面。物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的,逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的。
数据安全性要求数据需要按照需求以一定结构合理存储,利用访问控制降低数据被窃取的可能性,利用加密存储增加对数据窃取的犯罪成本,从而减少风险。
数据完整性包括数据的正确性、有效性和一致性。正确性是指数据的输入值与数据表对应域的数值、类型相同;有效性是指数据库中的数值约束满足现实应用中对该数值段的理论范围;一致性是指不同用户对同一数据的使用方法和理解应该是一样的。
并发:当多个用户同时访问数据库的同一资源时,多个资源的读写顺序不同将导致不同的结果,因此需要并发控制。当一位用户正在连续操作该数据时,有另一位用户中途读出改数据,则会读到不正确的数据,被称为数据脏读。这时就需要对这种并发操作施行控制,排除和避免这种错误的发生,保证数据的正确性。
故障恢复:数据库因软件原因(如计算机病毒、网络不稳定、程序Bug、误操作等)或物理原因(如突然断电、自然灾害、硬件老化等)导致数据的损坏,应存在一种恢复机制,使损失降到最小。
01 MySQL安全配置
1. 修改Root用户口令,删除空口令
在MySQL控制台中执行如下代码,将newpass换成实际的口令即可。
mysql> SET PASSWORD FOR‘root’@’lo calhost’=PASSWORD(’newpass’);
Query OK,0 rows affected,1 warning(0.01 sec)
2. 删除默认数据库和数据库用户
MySQL默认安装后带有test等数据库用于测试,可能带来不安全因素,因此将其移除,如下:
mysql> DROP DATABASE test;
Query OK,0 rows affected(0.00 sec)
有些MySQL数据库的匿名用户的口令为空。因而,任何人都可以连接到这些数据库。可以用下面的命令进行检查:
mysql> select * frommysql.user where user="";
3. 改变默认MySQL管理员帐号
首先创建一个与Root用户权限一样的用户。如下所示:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'new_admin'@'127.0.0.1' IDENTIFIED BY 'password';
Query OK,0 rows affected,1 warning(0.02 sec)
删除默认的Root用户,如下。
mysql> drop user root@'127.0.0.1';
mysql> drop user root@'lo calhost';
mysql> drop user root@'::1';
Query OK,0 rows affected(0.04 sec)
4. 使用独立用户运行MySQL
在一个安全系统中使用一个权限较低的独立系统用户运行MySQL,即使在MySQL存在安全问题时,也能有效地阻止黑客进一步入侵。
5. 禁止远程连接数据库
在my.cnf或my.ini的[mysqld]部分配置如下参数,可以关闭在TCP/IP端口上的监听进而达到保证安全的效果。
skip-networking
也可以仅监听本机,方法是在my.cnf的[mysqld]部分增加下面一行。
bind-address=127.0.0.1
若不得不启用远程连接数据库,则可以对目标的主机给予有限的访问许可。
mysql>GRANT SELECT,INSERT ON mydb.* TO 'username'@'host_ip';
6. 限制连接用户的数量
限制最大连接数,可以增加黑客暴力攻击数据库所需时间,增加攻击被发现的可能性,从而增加安全性。
可以在my.ini或my.cnf查找max_connections=100,修改为max_connections=1000服务里重启MySQL。或用如下命令修改最大连接数。
mysql> set GLOBAL max_connections=100;
Query OK,0 rows affected(0.00 sec)
7. 用户目录权限限制
安装时,MySQL以Root用户权限进行安装,软件默认都为Root权限。
安装完毕后,需要将数据目录权限设置为实际运行MySQL的用户权限,如下。
chown –R mysql:mysql/home/mysql/data
8. 命令历史记录保护
MySQL在用户的主目录下会生成一个.mysql_history的文件,该文件记录用户敲过的每条命令。该文件可能泄露数据库结构甚至密码等敏感信息,因此,要及时清除或阻止该文件的生成。
可以通过将日志文件定向到/dev/null的方法,阻止该文件的生成。
$export MYSQL_HISTFILE=/dev/null
9. 禁止MySQL对本地文件存取
LOAD DATA LOCAL INFILE可以从文件系统中读取文件,并显示在屏幕中或保存在数据库中。结合注入漏洞可以实现进一步的攻击。可以在my.cnf配置文件中的[mysqld]部分增加下面一行以禁止这一功能。
set-variable=lo cal-infile=0
10. MySQL服务器权限控制
数据库架构在服务器之上,服务器安全是数据库安全的基本保证。服务器上众多软件的权限控制合理,也是数据库安全的必要保障。
11. MySQL数据库权限控制
不仅是服务器有不同的权限控制,MySQL 数据库内部也应有严格的权限控制机制,针对不同的用户,应设置不同的权限。MySQL内置了CREATE、DROP、GRANT OPTION、REFERENCES等26种操作权限的控制,面向表、列、过程等对象,令每一位用户的每一条查询都有明确的权限界定,绝不越界。
为了安全考虑,设定权限时需要遵循以下几个原则。
(1)只授予能满足需要的最小权限,防止用户干坏事。例如,用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或delete权限。
(2)创建用户的时候限制用户的登录主机,一般是限制成指定IP或内网IP段。
(3)初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
(4)为每个用户设置满足密码复杂度的密码。
(5)定期清理不需要的用户,回收权限或删除用户。
02 MySQL数据库加密
数据库中的很多敏感字段,不允许随意查看,开发人员、运维人员甚至是数据库管理员也不允许查看,因此,要对数据库数据进行加密存放,更主要的是防止黑客脱库。
开发人员负责程序和加密算法的开发部署,运维人员负责配置程序的安装和密钥的配置,但与数据库不直接接触,数据库管理员负责数据库的维护和管理,但不知道密钥以及加密算法,无法解密数据库中的数据内容。通过这样的分块管理,保证数据库数据的安全。
运行如下SQL语句:
INSERT INTO `admin`(`id`,`name`,`pass`)VALUES('1','admin',AES_ENCRYPT('admin','key'))
插入到表中的数据如图1所示。
图1 插入表中的数据
通过查询语句:
SELECT `id`,`name`,AES_DECRYPT(`pass`,'key')FROM `admin`
可以看到表中内容,如图2所示。
图2 查询表中内容
而通常 key 通过配置文件得到,数据库管理无法得知 key,因此,即使能看到数据集,也得不到用户密码。黑客即使脱库,在没有key的情况下用户数据仍处于较安全状态。
03 数据库审计
数据库审计(DBAudit),是实时记录数据库活动情况,对数据库操作进行分析审查,用来发现可能遭受或正在遭受的攻击,并及时处理的一种安全保障措施。
审计记录包括有关已审计的操作、执行操作的用户以及操作的时间和日期的信息。审计记录可以存储在数据库审计线索中或操作系统上的文件中。标准审计包括有关权限、模式、对象和语句的操作。
通过审计分析,可以得知数据库的运行状况、数据库命令的执行情况、最慢SQL语句、访问量最大SQL语句、最大吞吐量、最大并发数等情况,用于系统的优化。可精确定位错误和入侵,便于系统维护和加固,便于取证和追责。
04 数据库漏洞扫描
数据库漏洞扫描是对数据库系统进行自动化安全评估的专业技术,在获得一个能全面覆盖数据库安全隐患的知识库前提下,对应每一条安全漏洞知识,预定义扫描策略集合,利用该集合匹配目标数据库系统,从而发现其中的问题和缺陷。根据已有知识库中的知识,评判该漏洞危害性,并给出参考的修复方案。
该技术将繁杂缓慢的人工查漏改为更为高效的机器查漏,将被动等待攻击改为主动模拟攻击发现漏洞,将抽象的漏洞情况以报表的形式有序呈现给用户,让用户更清晰地认识到漏洞的危害情况与系统当前状态的安全状态,并将复杂的补漏过程简化为补丁形式,极大地方便了用户搭建管理安全、高效的数据库系统。
05 数据库防火墙
数据库防火墙系统(DBFirewall)是基于数据库协议分析与控制技术的数据库安全防护系统。DBFirewall基于主动防御机制,实现数据库的访问行为控制、危险操作阻断、可疑行为审计。其利用SQL特征捕获阻断SQL注入行为,防止Web应用的SQL注入漏洞进一步产生危害。限定数据查询和下载数量,限定敏感数据访问的用户、地点和时间,防止敏感数据大量泄露,追踪审定非法行为,对非法操作详细记录,以供时候追踪和定责。
06 数据库脱敏
数据库脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,并仍能保证其有效性(保持原有数据类型和业务格式要求)、完整性(保证长度不变化、数据内涵不丢失)、关系性(保持表间数据关联关系、表内数据关联关系)。身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。A
|
|