SQL变更作为变更SQL执行的入口,需要极高的安全性。在工单提交、审批时,通过一系列的安全规则进行校验,只有满足规则校验的SQL,才能正常执行。
新版的安全规则具备非常灵活的能力(DSL),可以根据业务需求自定义风险级别,让不同风险的变更,走不同的审批流程。比如您可以用最严格的形式限制SQL的执行,或者以最宽松的形式放行所有SQL。详情请参见安全规则DSL语法。
账号角色为管理员、DBA、安全管理员。
SQL变更有两个基础配置项:
当一个SQL变更的工单被提交时,系统会校验该工单是否符合各检测点的相关规则。只有在全部校验通过的情况下,该工单才会被放行。SQL变更中有如下4个检测点:
if
@fac.env_type not in ['product']
and
@fac.sql_type in [ 'UPDATE','DELETE','INSERT']
then
@act.allow_submit
end
上面这段规则的含义是:如果数据库环境是线上,并且SQL语句是
UPDATE
、DELECT
、INSERT
类型,则允许提交工单。
风险识别规则:当工单通过了SQL执行规则的校验,系统会继续对其进行风险识别规则的校验。风险识别规则用于识别被提交工单的风险等级,您可以根据数据库环境、SQL影响行数、SQL类型等条件自定义风险等级。
注意:不同的安全规则会针对变更标记为不同的风险,最终DMS会结合所有的风险取最大值,例如3个中风险、5个低风险、1个高风险,则最终结果是高风险。
假设您希望将线下环境定义为低风险,则可以增加如下风险识别规则。如何增加安全规则请参见新增规则操作步骤。
if
@fac.env_type not in ['product','pre']
then
@act.mark_risk 'low' '低风险:线下环境'
end
上面这段规则的含义是:如果环境非线上生产环境,则风险等级为低风险。
风险审批规则:当风险识别规则识别出工单的风险等级以后,系统会根据风险审批规则中定义的规则对其作出相应处理。您可以在风险审批规则中自定义审批规则。
注意:
- 如果您的风险级别未在本检测点中命中任何规则,那么DMS将会采用基础配置项中数据变更默认审批模板指定的审批流程。详情请参见设置审批流程。
- 测试环境默认为低风险,低风险默认为无审批。
批量数据导入规则:仅适用于数据导入工单的校验。您可以使用安全规则模板库中提供的规则,也可以自定义新增规则。详情请参见新增规则操作步骤。
@fac.
开头,后接因子名称。每个模块的不同检测点均提供不同因子,SQL变更中提供因子的说明请参见下表:因子名 | 说明 |
---|---|
@fac.env_type | 环境类型,值为环境标识,如DEV 、PRODUCT 。更多环境类型请参见实例环境说明。 |
@fac.sql_type | SQL脚本的类型,如UPDATE 、INSERT 。详情请参见SQLConsole中对于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 | 识别为该风险的原因。 |
if
条件之后系统执行的行为,比如:禁止提交工单、选择工作流、允许执行、拒绝执行等,这些动作表达了安全规则的主要目的。动作全部以@act.
开头,后接动作名称。每个模块的不同检测点均提供不同动作,SQL变更中提供动作的说明请参见下表:动作名 | 说明 |
---|---|
@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 |
安全规则提供了大量的规则模板可直接选择启用,也可以在模板基础上按照实际需求自行调整启用。SQL变更中的模板如下所示:
检测点 | 模板 |
---|---|
SQL执行规则 | 允许所有DML在SQL控制台直接执行。 |
禁止所有DML在SQL控制台直接执行,必须以工单方式执行。 | |
允许所有DDL在SQL控制台直接执行。 | |
禁止所有DDL在SQL控制台直接执行,必须以工单方式执行。 | |
允许所有DCL在SQL控制台直接执行。 | |
禁止所有DCL在SQL控制台直接执行,必须以工单方式执行。 | |
允许所有可编程对象在SQL控制台直接执行。 | |
禁止所有可编程对象在SQL控制台直接执行,必须以工单方式执行。 | |
允许UPDATE在SQL控制台直接执行。 | |
禁止UPDATE在SQL控制台直接执行,必须以工单方式执行。 | |
允许DELETE在SQL控制台直接执行。 | |
禁止DELETE在SQL控制台直接执行,必须以工单方式执行。 | |
允许INSERT在SQL控制台直接执行。 | |
禁止INSERT在SQL控制台直接执行,必须以工单方式执行。 | |
允许TRUNCATE在SQL控制台直接执行。 | |
禁止TRUNCATE在SQL控制台直接执行,必须以工单方式执行。 | |
允许CREATE_TABLE在SQL控制台直接执行。 | |
禁止CREATE_TABLE在SQL控制台直接执行,必须以工单方式执行。 | |
允许DROP_TABLE在SQL控制台直接执行。 | |
禁止DROP_TABLE在SQL控制台直接执行,必须以工单方式执行。 | |
允许ALTER_TABLE在SQL控制台直接执行。 | |
禁止ALTER_TABLE在SQL控制台直接执行,必须以工单方式执行。 | |
允许KILL在SQL控制台直接执行。 | |
禁止KILL在SQL控制台直接执行,必须以工单方式执行。 | |
风险识别规则 | 测试环境,默认为低风险。 |
生产环境,默认为中风险。 | |
生产环境,跳过行数校验,默认为高风险。 | |
生产环境,insert行数超过10万,默认为高风险。 | |
生产环境,update/delete行数超过10万,默认为高风险。 | |
生产环境,包含敏感列,默认为高风险。 | |
生产环境,执行非DML语句,默认为高风险。 | |
线上库批量导入,默认为中风险。 | |
风险审批规则 | 低风险审批流程(无需审批)。 |
中风险审批流程。 | |
高风险审批流程。 | |
批量数据导入规则 | 允许批量导入插入语句。 |
允许批量导入指定工单的update语句(性能较好)。 |
说明:您也可以单击重置为免审批,使工单跳过审批步骤。
参数 | 说明 |
---|---|
检测点(必选) | 选择需要增加规则的检测点。SQL变更中提供了4个检测点:
|
模板库(可选) | 安全规则模板库中提供了大量规则模板,选择了检测点以后,您可以从模板库中按需加载规则模板。可选的模板库列表请参见模板库。 |
规则名称(必填) | 自定义规则名称。(如您在模板库中选择了规则模板,此处会自动填充。) |
规则DSL(必填) | 填写规则DSL,DSL语法请参见安全规则DSL语法。(如您在模板库中选择了规则模板,此处会自动填充。) |
在文档使用中是否遇到以下问题
更多建议
匿名提交