23C新特性SQL防火牆 (SQL Firewall)
描述
SQL 防火牆 的介紹
SQL 防火牆透過監控和阻止未經授權的SQL 和SQL 注入攻擊來工作。它內建了一系列規則,可以識別和阻止常見的SQL 注入攻擊,如布林型注入、報錯注入、聯合查詢注入、堆疊查詢注入等。此外,它還可以透過基於角色的訪問控制(RBAC )來限制使用者的訪問許可權,從而防止SQL 注入攻擊。
防火牆的優點在於它內建在資料庫內部,不需要任何外部元件或代理,因此可以提供更高效和可靠的防護。此外,它可以自動識別和阻止SQL 注入攻擊,而無需手動配置或更新防火牆規則。
SQL 防火牆的注意事項
- 如果我們基於捕獲進行 SQL 防火牆配置,則必須執行捕獲足夠長的時間才能獲取所有可能的變化。假設我們執行捕獲一週,然後基於該捕獲啟用 SQL 防火牆。然後,我們嘗試執行一些月度、季度或新增業務語句,它會被阻止,因為它在捕獲期間未執行過。
- 應用程式會隨著時間的推移而發展,因此新版本可能包含許多新的 SQL 語句,這些語句將被阻止,直到修改 SQL 允許列表。會話上下文允許列表( IP 地址、作業系統使用者和作業系統程式)也可能隨時間而更改。
- SQL 防火牆的存在並不是放鬆 “ 最小許可權 ” 管理和使用防火牆的傳統訪問控制的藉口。它是對那些應該已經到位的安全層的補充。
-
SQL
防火牆可用於監視活動,而不是阻止它。將過程中的引數
BLOCKENABLE_ALLOW_LIST
設定為 false 意味著它將記錄,但不會阻止。 - 可以在根容器或 PDB 中啟用 SQL 防火牆。
防火牆測試
建立測試使用者
建立使用者指令碼:
conn sys/SysPassword1@//localhost:1521/freepdb1 as sysdba drop user if exists fwadmin cascade; create user fwadmin identified by fwadmin; grant create session to fwadmin; grant sql_firewall_admin to fwadmin; drop user if exists schema_owner cascade; create user schema_owner identified by schema_owner quota unlimited on users; grant db_developer_role to schema_owner; drop user if exists app_user_1 cascade; create user app_user_1 identified by app_user_1; grant create session to app_user_1; grant select any table on schema schema_owner to app_user_1;
建立兩張表用於測試
drop table if exists schema_owner.t1 purge; create table schema_owner.t1 (id number); insert into schema_owner.t1 values (1); drop table if exists schema_owner.t2 purge; create table schema_owner.t2 (id number); insert into schema_owner.t2 values (2); commit;
防火牆抓取(審計)會話
登入防火牆許可權使用者,開啟防火牆
conn fwadmin/fwadmin@//localhost:1521/freepdb1 exec dbms_sql_firewall.enable;
使用以下查詢檢查 SQL 防火牆的狀態。
select status from dba_sql_firewall_status; STATUS -------- ENABLED
#
啟用對應使用者跟蹤日誌
begin dbms_sql_firewall.create_capture ( username => 'app_user_1', top_level_only => true, start_capture => true); end; /
新建會話使用app_user_1 使用者連線,執行查詢操作
# 用 sqlplus 連線執行
select * from schema_owner.t1; select * from schema_owner.t2;
# 用 pl/sql 也登入一個會話,執行同樣的操作
select * from schema_owner.t1; select * from schema_owner.t2;
回到防火牆管理員會話中,查詢日誌
select command_type, current_user, client_program, os_user, ip_address, sql_text from dba_sql_firewall_capture_logs where username = 'APP_USER_1'; COMMAND_TYPE CURRENT_USER CLIENT_PROGRAM OS_USER IP_ADDRESS SQL_TEXT ------------ --------------- --------------------------------------------- ---------- ---------- ------------------------------ SELECT APP_USER_1 sqlplus@localhost.localdomain (TNS V1-V3) oracle 127.0.0.1 SELECT DECODE (USER,:"SYS_B_0" ,XS_SYS_CONTEXT (:"SYS_B_1",:" SYS_B_2"),USER) FROM SYS.DUAL SELECT APP_USER_1 sqlplus@localhost.localdomain (TNS V1-V3) oracle 127.0.0.1 SELECT * FROM SCHEMA_OWNER.T2 SELECT APP_USER_1 PL/SQL tim_hall 10.0.2.2 SELECT * FROM SCHEMA_OWNER.T2 SELECT APP_USER_1 sqlplus@localhost.localdomain (TNS V1-V3) oracle 127.0.0.1 SELECT * FROM SCHEMA_OWNER.T1 SELECT APP_USER_1 PL/SQL tim_hall 10.0.2.2 SELECT * FROM SCHEMA_OWNER.T1 SQL> 停止抓取 exec dbms_sql_firewall.stop_capture('app_user_1');
建立防火牆規則
根據日誌為使用者生成允許列表。
exec dbms_sql_firewall.generate_allow_list ('app_user_1');
可以透過 IP 地址、程式、系統使用者、 SQL 語句進行配置規則。
#IP 地址
select * from dba_sql_firewall_allowed_ip_addr where username = 'APP_USER_1'; USERNAME IP_ADDRESS -------------------- ---------- APP_USER_1 10.0.2.2 APP_USER_1 127.0.0.1
# 應用程式
select * from dba_sql_firewall_allowed_os_prog where username = 'APP_USER_1'; USERNAME OS_PROGRAM -------------------- -------------------------------------------------- APP_USER_1 PL/SQL APP_USER_1 sqlplus@localhost.localdomain (TNS V1-V3)
# 系統使用者
select * from dba_sql_firewall_allowed_os_user where username = 'APP_USER_1'; USERNAME OS_USER -------------------- ---------- APP_USER_1 oracle APP_USER_1 tim_hall
#SQL 語句內容
select current_user, sql_text from dba_sql_firewall_allowed_sql where username = 'APP_USER_1'; CURRENT_USER SQL_TEXT --------------- -------------------------------------------------- APP_USER_1 SELECT DECODE (USER,:"SYS_B_0",XS_SYS_CONTEXT (:"S YS_B_1",:"SYS_B_2"),USER) FROM SYS.DUAL APP_USER_1 SELECT * FROM SCHEMA_OWNER.T2 APP_USER_1 SELECT * FROM SCHEMA_OWNER.T1 SQL>
使用以下過程配置允許下列
IP
地址可進行刪除操作。
## 新增 IP 地址
begin dbms_sql_firewall.add_allowed_context ( username => 'app_user_1', context_type => dbms_sql_firewall.ip_address, value => '192.168.56.1'); end; /
## 確認 IP 列表
column ip_address format a12 select * from dba_sql_firewall_allowed_ip_addr where username = 'APP_USER_1'; USERNAME IP_ADDRESS -------------------- ------------ APP_USER_1 10.0.2.2 APP_USER_1 127.0.0.1 APP_USER_1 192.168.56.1 SQL>
## 刪除 IP 地址
begin dbms_sql_firewall.delete_allowed_context ( username => 'app_user_1', context_type => dbms_sql_firewall.ip_address, value => '192.168.56.1'); end; /
## 確認 IP 列表
select * from dba_sql_firewall_allowed_ip_addr where username = 'APP_USER_1'; USERNAME IP_ADDRESS -------------------- ------------ APP_USER_1 10.0.2.2 APP_USER_1 127.0.0.1 SQL>
下面示例,我們同時啟用上下文和 SQL 允許列表。若將引數設定為 false 只會記錄異常操作,但不會阻止操作。
begin dbms_sql_firewall.enable_allow_list ( username => 'app_user_1', enforce => dbms_sql_firewall.enforce_all, block => true); end; /
可以使用檢視檢視允許列表的狀態。 DBA_SQL_FIREWALL_ALLOW_LISTS
select username, status, top_level_only, enforce, block from dba_sql_firewall_allow_lists where username='APP_USER_1'; USERNAME STATUS TOP_LEVEL_ONLY ENFORCE BLOCK -------------------- -------- -------------- --------------- -------------- APP_USER_1 ENABLED Y ENFORCE_ALL Y SQL>
可以使用該檢視檢查 SQL 防火牆的違規情況。 DBA_SQL_FIREWALL_VIOLATIONS
select sql_text, firewall_action, ip_address, cause, occurred_at from dba_sql_firewall_violations where username = 'APP_USER_1';
使用不同的會話,向資料庫發出未知和已知的 SQL 語句。請注意,未知語句失敗,並顯示 “ORA-47605 : SQL 防火牆衝突 ” 錯誤。
-- 未知語句
select count(*) from schema_owner.t1; Error starting at line : 1 in command - select count(*) from schema_owner.t1 Error at Command Line : 1 Column : 1 Error report - SQL Error: ORA-47605: SQL Firewall violation SQL>
-- 列表內語句
select * from schema_owner.t1; COUNT(*) ---------- 1 SQL>
登入防火牆管理員使用者並檢查違規行為。
select sql_text, firewall_action, ip_address, cause, occurred_at from dba_sql_firewall_violations where username = 'APP_USER_1' and sql_text like '%COUNT%'; SQL_TEXT FIREWAL IP_ADDRESS CAUSE OCCURRED_AT -------------------------------------------------- ------- ------------ -------------------- ----------------------------------- SELECT COUNT (*) FROM SCHEMA_OWNER.T1 Blocked 10.0.2.2 SQL violation 03-JUL-23 09.35.55.318805 PM +00:00 SQL>
如果我們發現應該允許透過的違規行為,我們可以手動將它們新增到允許列表中,也可以透過從日誌中提取它們來新增它們。
exec dbms_sql_firewall.append_allow_list('app_user_1', dbms_sql_firewall.violation_log);
嘗試再次執行導致衝突的查詢,會正常透過
select count(*) from schema_owner.t1; COUNT(*) ---------- 1 SQL>
防火牆相關檢視
select view_name from dba_views where view_name like 'DBA_SQL_FIREWALL%' order by 1; VIEW_NAME -------------------------------------------------------------------------------- DBA_SQL_FIREWALL_ALLOWED_IP_ADDR DBA_SQL_FIREWALL_ALLOWED_OS_PROG DBA_SQL_FIREWALL_ALLOWED_OS_USER DBA_SQL_FIREWALL_ALLOWED_SQL DBA_SQL_FIREWALL_ALLOW_LISTS DBA_SQL_FIREWALL_CAPTURES DBA_SQL_FIREWALL_CAPTURE_LOGS DBA_SQL_FIREWALL_SESSION_LOGS DBA_SQL_FIREWALL_SQL_LOGS DBA_SQL_FIREWALL_STATUS DBA_SQL_FIREWALL_VIOLATIONS
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/23825935/viewspace-3004479/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 23c 新特性之SQL_transpilerSQL
- 防火牆(firewall)防火牆
- 23c 新特性之實時SQL計劃管理SQL
- 什麼是防火牆(Firewall)?防火牆
- firewall-cmd - 防火牆規則管理工具防火牆
- CentOS7下Firewall防火牆配置用法詳解CentOS防火牆
- CentOS 中 iptables 和 firewall 防火牆的相關命令CentOS防火牆
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- Sophos Firewall (SFOS) v21 GA - 下一代防火牆防火牆
- 伺服器安全設定Centos7 防火牆firewall與iptables伺服器CentOS防火牆
- ABAP 740新的OPEN SQL增強特性SQL
- SQL?Server新特性SequenceNumber用法介紹YTZBSQLServer
- Oracle 20c 新特性:SQL 巨集支援(SQL Macro)Scalar 和 Table 模式OracleSQLMac模式
- 【10g SQL新特性】q-quote使用SQL
- Oracle 23C Free下載安裝及新特性Oracle
- WAb防火牆與傳統防火牆防火牆
- 防火牆防火牆
- Oracle Database 23c Beta 釋出,增加 300 多個新特性OracleDatabase
- [20181107]18c新特性取消執行的sql.txtSQL
- 防火牆入侵於檢測——————3、思科 PIX 防火牆和 ASA 防火牆產品線防火牆
- 防火牆iptables防火牆
- 防火牆配置防火牆
- iptables防火牆防火牆
- 防火牆入侵於檢測——————2、思科安全技術和特性防火牆
- ElasticSearch7.3學習(三十)----ES7.X SQL新特性解析及使用Java api實現sql功能ElasticsearchSQLJavaAPI
- SQL Server 2022 AlwaysOn新特性之包含可用性組介紹SQLServer
- Cisco Secure Firewall 4200 Series FTD Software 7.4.2 & ASA Software 9.20.3 釋出下載 - 思科防火牆系統軟體防火牆
- linux系統中firewalld防火牆管理工具firewall-config(GUI圖形使用者介面)Linux防火牆GUI
- Linux配置防火牆Linux防火牆
- 防火牆部署案例防火牆
- Linux防火牆命令Linux防火牆
- 防火牆介紹防火牆
- LINUX 防火牆 firewalldLinux防火牆
- CentOS 防火牆操作CentOS防火牆
- CentOS 7.0防火牆CentOS防火牆
- 梭子魚宣佈新的雲融合防火牆功能防火牆
- ubuntu 關閉防火牆命令 ubuntu怎樣關閉防火牆Ubuntu防火牆
- 防火牆 搜尋 釋出 防火牆是什麼?怎麼理解?防火牆