Halo Database安全功能-SQL防火墙
在当今时代,数据已成为各行各业的核心资产,数据安全已成为保障行业经济持续发展的底线屏障,而数据库作为数据存储的核心载体,是数据安全防护体系中最关键、最核心的防线。
Halo Database作为一款企业级的大型通用数据库管理系统,在数据库安全性方向为用户提供了全方位的防护体系,高安全性也让Halo Database成为现代企业的首选,下面来主要介绍Halo Database安全功能-SQL防火墙。
SQL防火墙作为数据库Halo Database安全体系的 "前端守门人",是专门针对SQL语句交互设计的动态防护机制,其核心价值在于通过对数据库访问的 SQL 查询进行实时监控、检测与拦截,从入口处阻断恶意操作。
以下是Halo Database SQL防火墙功能的测试实践演示:
Halo Database SQL防火墙功能参数sql_firewall_mode可以设置4个值:
disabled # 关闭SQL防火墙。
learning # 学习模式,防火墙会记录用户的SQL查询,作为用户常用查询的预期白名单,此时防火墙打开不做校验,这个过程建议持续一段较长的时间,尽量让防火墙学习到所有可能执行的SQL。
permissive # 此模式下,防火墙会对用户的SQL进行判断,如果用户的SQL不在白名单中,仍然会执行该SQL,但是会给用户一个报警,告知用户这条SQL不符合白名单记录的业务规则。
enforcing # 此模式下,防火墙会对用户的SQL进行判断。如果用户的SQL不在白名单中,防火墙会拒绝该SQL的执行并告知用户这是一个错误。
1.disabled模式(默认模式)
登录数据库,查看当前SQL防火墙参数配置
psqlshow sql_firewall_mode;
创建测试表和插入测试数据
create table sqlfirewall_test_allow (uid integer primary key,uname text not null);insert into sqlfirewall_test_allow values (1,'sqlfirewalltest1');insert into sqlfirewall_test_allow values (2,'sqlfirewalltest2');insert into sqlfirewall_test_allow values (3,'sqlfirewalltest3');insert into sqlfirewall_test_allow values (4,'sqlfirewalltest4');insert into sqlfirewall_test_allow values (5,'sqlfirewalltest5');insert into sqlfirewall_test_allow values (6,'sqlfirewalltest6');insert into sqlfirewall_test_allow values (7,'sqlfirewalltest7');create table sqlfirewall_test_reject (uid integer primary key,uname text not null);insert into sqlfirewall_test_reject values (1,'sqlfirewalltest1');insert into sqlfirewall_test_reject values (2,'sqlfirewalltest2');insert into sqlfirewall_test_reject values (3,'sqlfirewalltest3');insert into sqlfirewall_test_reject values (4,'sqlfirewalltest4');insert into sqlfirewall_test_reject values (5,'sqlfirewalltest5');insert into sqlfirewall_test_reject values (6,'sqlfirewalltest6');insert into sqlfirewall_test_reject values (7,'sqlfirewalltest7');
执行测试SQL语句
select * from sqlfirewall_test_allow where uid =1 and uname='sqlfirewalltest1';delete from sqlfirewall_test_allow where uid = 1;update sqlfirewall_test_allow set uid = 300 where uid=3;
在disabled模式以上SQL语句执行均可正常执行,无任何限制。
2.learning模式
打开防火墙learning模式
编辑Halo参数文件
vi /data/halo/postgresql.conf设置以下参数
sql_firewall_mode='learning'重启数据库
pg_ctl restart登录数据库,查看当前SQL防火墙参数配置
psqlshow sql_firewall_mode;
模拟用户日常业务执行SQL
select * from sqlfirewall_test_allow where uid =2 and uname='sqlfirewalltest2';delete from sqlfirewall_test_allow where uid = 4;update sqlfirewall_test_allow set uid =301 where uid=5;
查看用户常用查询的预期白名单中的SQL
select * from sql_firewall.sql_firewall_statements;在learning模式以上SQL语句执行均可正常执行,无任何限制,并记录SQL白名单。
3.permissive模式
打开防火墙permissive模式
vi /data/halo/postgresql.conf设置以下参数
sql_firewall_mode='permissive'重启数据库
pg_ctl restart登录数据库,查看当前SQL防火墙参数配置
psqlshow sql_firewall_mode;
执行测试SQL,测试SQL防火墙permissive模式是否生效
执行在白名单内的SQL,可以正常执行。
select * from sqlfirewall_test_allow where uid =2 and uname='sqlfirewalltest2';执行在白名单外的SQL,仍然会执行该SQL,但是会给用户一个报警,告知用户这条SQL不符合白名单记录的业务规则
select * from sqlfirewall_test_allow where uid =1 or uname='sqlfirewalltest1';delete from sqlfirewall_test_allow where uname like '%sqlfirewalltest1%';
在permissive模式以上SQL语句执行均可正常执行,无任何限制,但在非白名单内的SQL将有告警提示。
4.enforcing模式
打开防火墙enforcing模式
vi /data/halo/postgresql.conf设置以下参数
sql_firewall_mode='enforcing'重启数据库
pg_ctl restart登录数据库,查看当前SQL防火墙参数配置
psqlshow sql_firewall_mode;
测试执行在白名单的SQL均可正常执行。
select * from sqlfirewall_test_allow where uid =2 and uname='sqlfirewalltest2';delete from sqlfirewall_test_allow where uid = 4;update sqlfirewall_test_allow set uid =301 where uid=5;
测试非白名单的SQL,在白名单外的SQL均无法执行。
select * from sqlfirewall_test_reject where uid =1 or uname='sqlfirewalltest1 or uid > 3';update sqlfirewall_test_reject set uname='test';delete from sqlfirewall_test_reject;drop table sqlfirewall_test_reject;
在enforcing模式以上SQL语句在白名单内的执行均可正常执行,在非白名单内的SQL均被防火墙拦截无法执行。
5.白名单管理
白名单移除
查看当前设置白名单
select * from sql_firewall.sql_firewall_statements;将sql_firewall_mode改为disabled
将hash_value值为-1344290182252713742对应的白名单SQL删除
delete from sql_firewall.sql_firewall_statements where hash_value= -1344290182252713742;将sql_firewall_mode改为enforcing
再执行之前在SQL白名单的语句,语句报错无法执行,被SQL防火墙拦截。
update sqlfirewall_test_allow set uid =301 where uid=5;白名单添加
查看当前设置白名单
select * from sql_firewall.sql_firewall_statements;将sql_firewall_mode改为disabled
将之前移除的SQL加入白名单
insert into sql_firewall.sql_firewall_statements (hash_value,query) values (‘-1344290182252713742,' update sqlfirewall_test_allow set uid =$1 where uid=$2;');将sql_firewall_mode改为enforcing
再次执行之前被SQL防火墙拦截的测试SQL,发现已经可以正常执行。
update sqlfirewall_test_allow set uid =301 where uid=5;好了,关于Halo Database安全功能-SQL防火墙的测试和演示分享就到这里,期待与您一起共同探索Halo Database更多的功能。