SQL變更作為變更SQL執行的入口,需要極高的安全性。在工單提交、審批時,通過一系列的安全規則進行校驗,只有滿足規則校驗的SQL,才能正常執行。
前提條件
系統角色為管理員、DBA或安全管理員。
背景信息
數據管理DMS的安全規則具備非常靈活的DSL能力,可以根據業務需求自定義風險級別,讓不同風險的變更,走不同的審批流程。例如,您可以用最嚴格的形式限制SQL的執行,或者以最寬松的形式放行所有SQL。
SQL變更模塊檢測點
檢測點 | 說明 | 示例 |
基礎配置項 | 基礎配置項中包含5個默認規則:
| - |
SQL執行規則 | 用于限制在SQL窗口執行SQL語句,只有被允許的SQL語句才能通過SQL窗口執行。 說明 如果相互矛盾的兩個規則同時被啟用,系統會依照更嚴格的規則執行。 例如,以下兩條規則同時被啟用,系統將按第二種規則執行。
| 僅允許DML語句對線上商品庫做出修改,可以增加如下SQL執行規則: 假設。
代碼含義:如果數據庫環境為非線上生產環境,并且SQL語句是 |
風險識別規則 | 用于識別被提交工單的風險等級,您可以根據數據庫環境、SQL影響行數、SQL類型等條件自定義風險等級。 說明 不同的安全規則針對變更任務會標記不同的風險等級,最終取所有風險等級的最大值。 例如一個SQL變更任務有5個低風險、3個中風險和1個高風險,則最終該任務被認定為高風險。 | 將線下環境定義為低風險,可以增加如下風險識別規則:
代碼含義:如果數據庫環境為非線上生產環境,則風險等級為低風險。 |
風險審批規則 | 配置或自定義風險等級的審批規則。 如果數據庫在風險識別規則檢測點中未命中任何風險等級,那么數據庫將采用基礎配置項中數據變更默認審批模板指定的審批流程。 | 測試環境默認為低風險等級,低風險默認無需審批。 |
批量數據導入規則 | 適用于數據導入工單的校驗規則。 | 允許批量導入插入語句。 |
修改默認審批模板
- 登錄數據管理DMS 5.0。
單擊控制臺左上角的圖標,選擇
。說明若您使用的是非極簡模式的控制臺,在頂部菜單欄中,選擇
。在安全規則頁簽中,單擊目標規則集操作列中的編輯。
在詳情頁面左側的導航欄中,單擊SQL變更模塊。
在SQL變更模塊中,單擊基礎配置項。
在數據變更默認審批模板的操作列中,單擊編輯。
在編輯配置項對話框中,單擊切換審批模板。
在切換審批模板對話框中,單擊目標模板操作中的選擇,將默認審批模板切換為目標模板。
說明如果工單不需要審批,您可以單擊重置為免審批,使工單自動跳過審批步驟。
單擊提交。
SQL變更模塊因子和動作
因子
因子是系統內置變量,可用來獲取安全規則校驗的上下文信息,如獲取SQL類型、影響行數等。
因子全部以
@fac.
開頭,后接因子名稱。每個模塊的不同檢測點會提供不同因子。
表 1. 因子列表
因子 | 說明 |
@fac.env_type | 環境類型,值為環境標識,如 |
@fac.sql_type | SQL腳本的類型,如 |
@fac.detail_type | 數據變更的種類:
|
@fac.is_logic | 是否為邏輯庫。 |
@fac.extra_info | 其他變更信息(暫無用途)。 |
@fac.is_ignore_affect_rows | 是否跳過校驗。 |
@fac.insert_rows | 插入數據的影響行數。 |
@fac.update_delete_rows | 更新數據的影響行數。 |
@fac.max_alter_table_size | 修改表中,最大的表空間大小。 |
@fac.is_has_security_column | SQL腳本中是否包含敏感列。 |
@fac.security_column_list | SQL腳本中包含的敏感列列表。 |
@fac.risk_level | 識別到的風險級別。 |
@fac.risk_reason | 識別為該風險的原因。 |
@fac.table_name_list | SQL變更涉及的表名列表。使用示例如下:
代碼含義:若SQL變更涉及的表名為tb_order或tb1_order,則風險等級為高風險。 |
動作
動作是滿足if
條件之后系統執行的行為,例如:禁止提交工單、選擇工作流、允許執行、拒絕執行等。
動作全部以
@act.
開頭,后接動作名稱。每個模塊的不同檢測點會提供不同動作。
表 2. 動作列表
動作 | 說明 |
@act.allow_submit | 允許提交工單執行。 |
@act.allow_execute_direct | 允許直接在SQL控制臺執行。 |
@act.forbid_execute | 禁止執行。 |
@act.mark_risk | 標記風險。用法: |
@act.do_not_approve | 指定審批模板ID。詳情請參見設置審批流程。 |
@act.choose_approve_template | |
@act.choose_approve_template_with_reason |