在日常开发、测试中,数据库由于存储了大量业务数据而成为整个系统中极为重要的关键节点,作者在前期发表的《信息泄漏防不胜防!终于有测试人关注信息安全了》一文中对Oracle数据库的透明数据加密技术(Oracle TDE)进行了详细阐述,本文将从数据库的访问控制角度对Oracle、Mysql、Gbase三种常见关系型数据库(RDBMS)的黑白名单配置方法进行说明,方法很简单,但却很实用,希望能对开发、测试及运维人员有所帮助。
一.Oracle数据库黑白名单配置方法
1.测试环境版本说明:Suse Linux 11 SP2 + Oracle 12.1.0.2
2.涉及文件:修改$ORACLE_HOME/network/admin/sqlnet.ora文件,若没有该文件可新建。
3.主要参数说明:
表1.主要参数说明
一般来讲tcp.invited_nodes与tcp.excluded_nodes配置一个即可,当同时配置时tcp.invited_nodes优先级更高。
4.配置方法:编辑$ORACLE_HOME/network/admin/sqlnet.ora文件,加入如下参数:
tcp.validnode_checking = yes tcp.invited_nodes = XXX.XXX.XXX.XXX,XXX.XXX.XXX.XXX...
重启监听服务,配置生效:
lsntctl stop;
lsnrctl start;
5.测试验证:不在白名单清单中的机器远程登录Oracle数据库时报ORA-12547:TNS:lost contact错误,并且无论通过客户端还是应用程序(如jdbc,odbc)登录或连接数据库都将受限。
图1.Oracle黑名单登录报错信息
二.Mysql数据库黑白名单配置方法说明
测试环境说明:Suse Linux 11 SP2 + Mysql 5.7.20
Mysql数据库的黑白名单配置方法更为简单,在Mysql数据库中用户分为两部分:用户名@‘白名单’。
可以在创建数据库登录用户时设置该用户可以通过哪些IP地址访问数据库,如:
create user test@’10.0.0.1’ identified by ‘XXXXXX’;
上面SQL创建的test用户将只能从10.0.0.1的机器上通过TCP/IP方式登录数据库;Mysql还支持*号通配符,对于某一个范围的IP地址段可使用*进行统一指定,如:
create user test@’10.0.0.*’ identified by ‘XXXXXX’;
上面SQL创建的test用户将可以从10.0.0的整个段登录Mysql数据库。
需要注意的是,test@’10.0.0.1’与test@’10.0.0.*’两个用户虽然名字是一样的,但却是两个不同的用户,因为用户可以登录的机器列表是不同的。
当在非白名单清单中的数据库或客户端上登录远程Mysql数据库时,会报主机不能连接Mysql服务的错误提示:
图2.Mysql黑名单登录报错信息
三.GBASE数据库黑白名单配置方法说明
Gbase数据库作为国产MPP列存储数据库,目前主要用于业务分析及统计类系统中。由于GBASE数据库的SQL语法与MYSQL类似,其用户也分为两部分:用户名@‘白名单’,因此GBASE数据库的黑白名单设置方法与Mysql一致,在此不在重复说明。
四.操作系统防火墙实现黑白名单登录控制
从本质上来讲,这种方法不是数据库层面的黑白名单控制方法,而是在操作系统网络防火墙层面做的访问控制,故在此只做简单论述。
首先需要确保防火墙已经开启,之后执行:
iptables -I INPUT -s XXX.XXX.XXX.XXX -p tcp --dport 1521 -j ACCEPT
进行白名单添加,之后重启防火墙即可,具体操作会随操作系统版本的不同而有差异,读者可根据自己的操作系统版本自行尝试。
五.综述与总结
数据库的黑白名单控制方式非常简单,即使对数据库的运行机制不是很了解也可以快速上手,但是其起到的效果和实用性却非常高。对于使用需保护的敏感数据进行开发、测试的过程中,为加强敏感数据的保护,防止恶意攻击,可考虑按照数据库的产品类型进行白名单的配置,一定程度上将登录数据库的范围缩短至可控范围,方便事后的可追溯性,有此需求的小伙伴不妨试一下,说不定会有惊喜。
作者:颜廷义
来源:51Testing软件测试网原创