全部產品
Search
文件中心

:SQL變更

更新時間:Nov 14, 2024

SQL變更作為變更SQL執行的入口,需要極高的安全性。在工單提交、審批時,通過一系列的安全規則進行校正,只有滿足規則校正的SQL,才能正常執行。

前提條件

系統角色為管理員DBA安全性系統管理員

背景資訊

Data Management的安全規則具備非常靈活的DSL能力,可以根據業務需求自訂風險層級,讓不同風險的變更,走不同的審批次程序。例如,您可以用最嚴格的形式限制SQL的執行,或者以最寬鬆的形式允許存取所有SQL。

SQL變更模組檢測點

檢測點

說明

樣本

基礎配置項

基礎配置項中包含5個預設規則:

  • 資料變更預設審批模板:資料變更類工單的預設審批模板ID為853,審批人為DBA。

    說明

    更改預設審批模板,請參見修改預設審批模板

  • 資料變更風險等級列表:風險等級可以對工單中的變更進行風險評估,您可以在不同情境中設定不同的風險等級和審批次程序,主要用於風險識別規則風險審批規則檢測點。

    預設風險等級有四種:

    • LOW:低風險

    • MIDDLE:中風險

    • HIGH:高風險

    • HIGHEST:重大風險

  • 資料匯入是否支援選擇極速模式:安全規則對應的資料庫在建立資料匯入工單時是否支援極速模式。更多資訊,請參見資料匯入

  • 普通資料變更是否允許跳過影響行數校正:如果開啟該規則,則在普通資料變更工單的預檢查階段,DMS禁止工單跳過行數校正。反之允許跳過行數校正。

  • 普通資料變更禁止行數校正不一致的工單提交:如果開啟該規則,行數校正不一致的普通資料變更工單將不允許被提交。反之允許提交工單。

-

SQL執行規則

用於限制在SQL視窗執行SQL語句,只有被允許的SQL語句才能通過SQL視窗執行。

說明

如果相互矛盾的兩個規則同時被啟用,系統會依照更嚴格的規則執行。

例如,以下兩條規則同時被啟用,系統將按第二種規則執行。

  • 允許所有DML在SQL控制台直接執行。

  • 禁止所有DML在SQL控制台直接執行,必須以工單方式執行。

僅允許DML語句對線上商品庫做出修改,可以增加如下SQL執行規則:

假設。

if
  @fac.env_type not in ['product']
  and
  @fac.sql_type in [ 'UPDATE','DELETE','INSERT']
then
  @act.allow_submit
end

代碼含義:如果資料庫環境為非線上生產環境,並且SQL語句是UPDATEDELETEINSERT類型,則允許執行該SQL語句。

風險識別規則

用於識別被提交工單的風險等級,您可以根據資料庫環境、SQL影響行數、SQL類型等條件自訂風險等級。

說明

不同的安全規則針對變更任務會標記不同的風險等級,最終取所有風險等級的最大值。

例如一個SQL變更任務有5個低風險、3個中風險和1個高風險,則最終該任務被認定為高風險。

將線下環境定義為低風險,可以增加如下風險識別規則:

if
  @fac.env_type not in ['product','pre']
then
  @act.mark_risk 'low' '低風險:線下環境'
end

代碼含義:如果資料庫環境為非線上生產環境,則風險等級為低風險。

風險審批規則

配置或自訂風險等級的審批規則。

如果資料庫在風險識別規則檢測點中未命中任何風險等級,那麼資料庫將採用基礎配置項資料變更預設審批模板指定的審批次程序。

測試環境預設為低風險等級,低風險預設無需審批。

批量資料匯入規則

適用於資料匯入工單的校正規則。

允許大量匯入插入語句。

修改預設審批模板

  1. 登入Data Management 5.0
  2. 單擊控制台左上方的2023-01-28_15-57-17.png表徵圖,選擇全部功能 > 安全與規範 > 安全規則

    說明

    若您使用的是非極簡模式的控制台,在頂部功能表列中,選擇安全與規範 > 安全規則

  3. 安全規則頁簽中,單擊目標規則集操作列中的編輯

  4. 詳情頁面左側的導覽列中,單擊SQL變更模組。

  5. SQL變更模組中,單擊基礎配置項

  6. 資料變更預設審批模板操作列中,單擊編輯

  7. 編輯配置項對話方塊中,單擊切換審批模板

  8. 切換審批模板對話方塊中,單擊目標模板操作中的選擇,將預設審批模板切換為目標模板。

    說明

    如果工單不需要審批,您可以單擊重設為免審批,使工單自動跳過審批步驟。

  9. 單擊提交

SQL變更模組因子和動作

因子

因子是系統內建變數,可用來擷取安全規則校正的上下文資訊,如擷取SQL類型、影響行數等。

  • 因子全部以@fac.開頭,後接因子名稱。

  • 每個模組的不同檢測點會提供不同因子。

表 1. 因子列表

因子

說明

@fac.env_type

環境類型,值為環境標識,如DEVPRODUCT。更多環境類型請參見執行個體環境說明

@fac.sql_type

SQL指令碼的類型,如UPDATEINSERT。詳情請參見SQLConsole中對於SQL子類的描述。

@fac.detail_type

資料變更的種類:

  • COMMON:普通資料變更

  • CHUNK_DML:無鎖資料變更

  • PROCEDURE:預存程序

  • CRON_CLEAR_DATA:定時清理表

  • BIG_FILE:批量資料匯入

@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變更涉及的表名列表。使用樣本如下:

if    
   'tb_order' in @fac.table_name_list or 'tb1_order' in @fac.table_name_list
then    
    @act.mark_risk 'high' '高風險:涉及訂單表變更'
end

代碼含義:若SQL變更涉及的表名為tb_order或tb1_order,則風險等級為高風險。

動作

動作是滿足if條件之後系統執行的行為,例如:禁止提交工單、選擇工作流程、允許執行、拒絕執行等。

  • 動作全部以@act.開頭,後接動作名稱。

  • 每個模組的不同檢測點會提供不同動作。

表 2. 動作列表

動作

說明

@act.allow_submit

允許提交工單執行。

@act.allow_execute_direct

允許直接在SQL控制台執行。

@act.forbid_execute

禁止執行。

@act.mark_risk

標記風險。用法:@act.mark_risk 'middle' '中風險:線上環境'

@act.do_not_approve

指定審批模板ID。詳情請參見設定審批次程序

@act.choose_approve_template

@act.choose_approve_template_with_reason