Oracle Database 23ai 内置 SQL 防火墙启用
在当今数字化时代,数据库作为企业核心数据资产的存储中心,面临着日益严峻的安全威胁。其中,SQL 注入攻击凭借其高危害性和普遍性,长期位居 OWASP Web 应用程序安全风险 Top 10 之列。为应对这一威胁,Oracle Database 23ai 内置了 SQL 防火墙,为数据库安全筑起第一道坚固屏障。
1、激活 SQL 防火墙
激活 SQL 防火墙是启用流程的首要步骤,执行以下简单命令即可:
SQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 FREEPDB1 READ WRITE NO
SQL> alter session set container=freepdb1;Session altered.SQL> exec dbms_sql_firewall.enable;PL/SQL procedure successfully completed.SQL>
该命令执行后,将在数据库内核层面激活 SQL 防火墙功能,为后续的 SQL 流量捕获和白名单构建奠定基础。激活操作无需对应用程序进行任何修改,部署简单且对数据库性能影响极小,经测试,CPU 负载增加不超过 1.5%,不会影响企业正常业务运行。
2、收集 SQL 构建白名单
激活防火墙后,需进入 SQL 流量收集阶段,为每个需要保护的数据库用户构建个性化的白名单基线。这一阶段是确保防火墙精准防护的关键,需按照以下步骤操作:
启动 SQL 流量捕获,针对目标数据库用户test,执行以下命令启动 SQL 流量捕获:
SQL> exec dbms_sql_firewall.create_capture('test');PL/SQL procedure successfully completed.
执行该命令后,SQL 防火墙将开始实时捕获test用户的所有 SQL 流量,包括常规业务操作产生的 SQL 语句、数据库连接路径信息等。
在捕获过程中,管理员需定期监控捕获日志,确保已充分捕获目标用户的常规 SQL 流量。通过执行以下 SQL 语句,可查看捕获的详细信息:
select username, sql_text, accessed_objects from dba_sql_firewall_capture_logs where username = 'TEST'; |
该语句将返回test用户被捕获的 SQL 语句(sql_text)及访问的数据库对象,管理员需确认捕获的 SQL 语句覆盖了所有核心业务场景,无遗漏关键操作的 SQL。
停止捕获,当确认已捕获足够的 SQL 流量(通常建议覆盖 1-2 个完整业务周期,确保包含各类常规业务操作)后,执行以下命令停止捕获:
SQL> exec dbms_sql_firewall.stop_capture('test');PL/SQL procedure successfully completed.
停止捕获后,防火墙将基于已捕获的 SQL 流量,初步构建目标用户的白名单框架,为后续生成正式白名单做好准备。
生成白名单,执行以下命令为test用户生成正式白名单:
SQL> exec dbms_sql_firewall.generate_allow_list('test');PL/SQL procedure successfully completed.
该命令将根据之前捕获的 SQL 流量,自动生成包含可信 SQL 语句、执行上下文(允许的 IP 地址、OS 用户名、OS 程序)的白名单。
查看允许的 SQL 语句及执行上下文:
select username, current_user, top_level, sql_text, accessed_objects from dba_sql_firewall_allowed_sql where username='TEST' order by sql_text, current_user, top_level; |
查看允许的 IP 地址:
select username, ip_address from sys.dba_sql_firewall_allowed_ip_addr where username='TEST'; |
查看允许的 OS 用户名:
select username, os_user from sys.dba_sql_firewall_allowed_os_user where username='TEST'; |
查看允许的 OS 程序:
select username, os_program from sys.dba_sql_firewall_allowed_os_prog where username='TEST'; |
若发现白名单中遗漏了部分可信 SQL 语句或执行上下文,可执行以下命令追加内容到白名单(以从捕获日志中追加为例):
SQL> exec dbms_sql_firewall.append_allow_list('test', SYS.DBMS_SQL_FIREWALL.CAPTURE_LOG);PL/SQL procedure successfully completed.
3、执行防护策略,开启观察模式
完成白名单构建后,即可部署并执行 SQL 防火墙防护策略,根据业务需求选择观察模式或拦截模式,实现对数据库的实时安全防护。
在正式启用拦截功能前,建议先开启观察模式。该模式下,防火墙会对所有 SQL 语句进行验证,若发现违规行为(如 SQL 注入语句、非授权 IP 地址访问等),仅记录违规日志,不阻止 SQL 执行,便于管理员进一步优化白名单,避免误拦截正常业务操作。
执行以下命令为 “test” 用户在观察模式下启用白名单:
SQL> exec dbms_sql_firewall.enable_allow_list(username => 'test',enforce => SYS.DBMS_SQL_FIREWALL.ENFORCE_ALL,block => FALSE);PL/SQL procedure successfully completed.
其中,“block => FALSE” 表示开启观察模式,不阻止违规 SQL 执行;“enforce => SYS.DBMS_SQL_FIREWALL.ENFORCE_ALL” 表示对 SQL 语句及执行上下文进行全面验证。
启用观察模式后,需定期查看违规日志,了解是否存在违规访问行为及白名单是否存在遗漏。执行以下命令可查看违规详情:
-- 刷新日志,确保获取最新违规记录 SQL> exec dbms_sql_firewall.flush_logs; PL/SQL procedure successfully completed. -- 查看违规记录 select username, cause, firewall_action, sql_text, accessed_objects, ip_address, client_program, os_user from dba_sql_firewall_violations where username='TEST' order by occurred_at; |
通过分析违规日志,若发现正常业务 SQL 被误判为违规,需及时检查白名单并追加相关可信内容;若确认是恶意违规行为(如包含 “OR 1=1” 的 SQL 注入语句),则无需修改白名单,待切换到拦截模式后进行阻断。
4、开启拦截模式,实现实时监控与拦截
当观察模式运行一段时间(建议 1-2 天),确认白名单准确无误、无正常业务 SQL 被误判后,可切换到拦截模式。该模式下,防火墙会对违规 SQL 语句直接进行阻断,从根本上抵御恶意攻击。
执行以下命令将 “test” 用户的防火墙模式更新为拦截模式:
SQL> exec dbms_sql_firewall.update_allow_list_enforcement('test', block=>TRUE);PL/SQL procedure successfully completed.
执行该命令后,若有用户发出与白名单不匹配的 SQL 语句(如 SQL 注入语句)或从非授权连接路径访问数据库,防火墙将直接阻断 SQL 执行,并报错 “ORA-47605 SQL Firewall violation”,同时记录详细违规日志。
非授权ip或主机登录报错
如发生正常被拦截,可以关闭拦截,再排查,处理完成再开启
SQL> exec dbms_sql_firewall.update_allow_list_enforcement('test', block=>FALSE);PL/SQL procedure successfully completed.
5、配置审计策略
为进一步加强安全管理,可配置审计策略,对 SQL 防火墙的所有操作及违规行为进行审计,便于后续安全分析和追溯。执行以下命令创建并启用审计策略:
-- 创建审计策略 create audit policy EMPSEARCH_APPLICATION_AUDIT_POLICY actions component = SQL_Firewall ALL on test; -- 启用审计策略 audit policy EMPSEARCH_APPLICATION_AUDIT_POLICY; -- 查看审计记录 select * from unified_audit_trail where UNIFIED_AUDIT_POLICIES like '%EMPSEARCH_APPLICATION_AUDIT_POLICY%' order by event_timestamp; |
6、23ai数据库SQL 防火墙优势
Oracle Database 23ai SQL 防火墙凭借其独特的设计,具备以下显著优势:
- 无法被绕过:防火墙嵌入数据库内核,所有对数据库的 SQL 访问请求都必须经过防火墙验证,从根本上杜绝了绕过防火墙的可能性。
- 精准防护:基于白名单机制,仅允许可信的 SQL 语句和连接路径访问数据库,可轻松防护未知的 SQL 注入攻击及异常访问。
- 低性能影响:经实际测试,启用防火墙后 CPU 负载增加不超过 1.5%,几乎不影响数据库正常运行性能,保障企业业务高效开展。
- 部署便捷:无需修改应用程序,通过简单的 PL/SQL 命令即可完成启用和配置,降低企业部署成本和复杂度。
企业可轻松启用 Oracle Database 23ai 内置 SQL 防火墙,有效抵御 SQL 注入攻击及异常访问风险,为核心数据资产构建坚实的安全防线。在数字化转型加速推进的今天,加强数据库安全防护已成为企业不可或缺的重要工作,Oracle Database 23ai SQL 防火墙无疑为企业提供了高效、可靠的安全解决方案。