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 |