您可以在DMS中通过SQL Console直接输入SQL语法或通过数据变更工单提交数据变更。同时,您可以自定义安全规则,实现对不同环境库定义不同的数据变更执行配置。本文将通过以下4个例子向您介绍典型场景下的安全规则设定与对应提交数据变更的方式。

注意事项

本示例中:
  • poc_dev实例的安全规则为POC开发库规则
  • poc_prod实例的安全规则为POC生产库规则

通过提交工单执行数据变更

本示例以提交工单的方式执行INSERT语句。

  1. 设置安全规则。
    说明 默认的 安全规则规定以工单的方式执行所有DML(Data Manipulation Language)语句。
  2. 执行INSERT语句。
    1. 以普通用户账号登录DMS控制台
    2. 在DMS对象列表中展开poc_prod实例,双击poc_prod数据库,即可进入SQL Console页。
    3. 在SQL Console窗口中,输入如下语句单击执行

      往数据库中插入3行数据。

      INSERT INTO data_modify (name, phone, sex) VALUES ('dms_a', '19000001','男');
      INSERT INTO data_modify (name, phone, sex) VALUES ('dms_b', '19000002','女');
      INSERT INTO data_modify (name, phone, sex) VALUES ('dms_c', '19000003','男');
    4. 单击申请数据变更
      说明 由于默认的安全规则规定了 INSERT语句不能在SQL Console直接执行,而是通过提交数据变更工单的方式执行数据变更,所以系统提示需要提交数据变更工单。
      申请数据变更
    5. 创建SQL变更工单弹窗中,配置如下信息。创建SQL变更工单
      配置项 说明
      原因类别(必选) 根据实际情况选择数据导入的原因。
      业务背景(必选) 详细填写本次操作的业务背景。
      相关人(可选) 被设置的人员可查看工单并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
      执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持:
      • 审批通过后,自动执行
      • 最后审批人执行
      影响行数(必填) 预估本次更新会影响的数据行数,可在SQL Console以count统计。
      回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。
    6. 单击确认,此时系统将自动生成工单,继续单击查看工单查看工单
    7. 工单详情页中,再次确认工单详情信息。
      说明 您可以在 工单详情页中,查看工单的详情信息,同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。
    8. 确认信息无误且预检查通过后,单击提交审批,并等待审批完成。提交审批按钮
      说明
      • 在提交审批前,您可以修改工单内容和定时配置,一旦提交审批后,将不能修改相关信息。
      • 关于审批的操作详情请参见审批数据变更工单
      • 您可以在审批页签下,单击查看审批详情查询审批进度。数据变更-查看审批详情
    9. 待审批通过后,单击执行变更,配置如下信息,单击确定执行执行变更任务设置
      配置项 说明
      是否立即执行 选择是否立即执行,支持:
      • 立即执行:提交即刻执行。
      • 定时执行:按需指定在业务特定时间执行。
      默认为立即执行
      是否事务控制 选择是否开启事务控制,支持:
      • 开启:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
      • 关闭:逐条提交,遇到失败则终止但不回滚。
      默认为关闭。
      是否备份数据 选择是否备份数据,支持:
      • 开启:针对UPDATE、DELETE语句将要影响数据,系统生成对应的INSERT脚本附件,对原数据进行备份。
      • 关闭:不生成备份附件。
      默认为开启。
      说明 在创建工单时,若 执行方式选择为 审批通过后,自动执行,系统会自动跳过此步骤。
    10. 系统将自动执行,工单结束。

      待执行成功后,您可通过单击详情按钮,查看执行日志详细,包括执行语句、执行所用时间、调度详情等信息。

设置开发库可免工单执行DML语句

若开发库的数据变更均需提交工单执行,会导致开发人员研发效能下降。您可以通过DMS内置的安全规则引擎,设置允许研发人员直接在SQL Console对开发库执行DML语句,且不需要提交工单审批,即可实现在不影响数据安全的情况下提升研发效能。

本示例将在SQL Console对开发库执行INSERT语句。

  1. 设置安全规则。
    1. 以管理员账号登录DMS控制台
    2. 在顶部菜单栏,选择系统管理 > 安全管理 > 安全规则,进入安全规则页面。安全规则路径
    3. 单击POC开发库规则右侧操作列下的编辑编辑开发库规则
    4. 详情页左侧的导航栏中,单击SQL变更,并单击SQL执行规则
    5. 找到允许所有DML在SQL控制台直接执行规则名,单击右侧的编辑编辑开发库规则
    6. 替换如下规则DSL,并单击提交编辑规则-开发库
      if
          @fac.sql_type in
          [ 'UPDATE','DELETE','INSERT','INSERT_SELECT','REPLACE','REPLACE_INTO','MERGE']
          AND
          @fac.env_type not in ['product','pre']
      then
          @act.allow_execute_direct
      elseif
          @fac.sql_type in
          [ 'UPDATE','DELETE','INSERT','INSERT_SELECT','REPLACE','REPLACE_INTO','MERGE']
          AND
          @fac.env_type in ['product','pre']
      then
          @act.allow_submit
      end
      说明 您可以在DMS中将数据库定义成多种环境类型,例如生产环境( product)、预发环境( pre)、开发环境( dev)、测试环境( test)等。该段安全规则DSL表示:数据库环境类型不为 productpre的数据库可以直接执行 UPDATEDELETEINSERT等上述DML语句,数据库环境类型为 productpre的数据库需要通过提交工单执行上述DML语句。更多安全规则语法介绍请参见 安全规则DSL语法
    7. 启用允许所有DML在SQL控制台直接执行规则,并禁用与其对应的原规则。开发库启用新规则
      说明
      • 允许所有DML在SQL控制台直接执行规则对应的规则为禁止所有DML在SQL控制台直接执行,必须以工单方式执行规则。
      • 若同时启用相对应的一组规则,系统将执行严管控原则。在本示例中,即会以工单的方式执行。
  2. 执行INSERT语句。
    1. 以普通用户账号登录DMS控制台
    2. 在DMS对象列表中展开poc_dev实例,双击poc_dev数据库,即可进入SQL Console页。
    3. 在SQL Console窗口中,输入如下语句并单击执行

      往数据库中插入1行数据。

      INSERT INTO data_modify (name, phone, sex) VALUES ('dms_a', '19000001','男');
      INSERT INTO data_modify (name, phone, sex) VALUES ('dms_b', '19000002','女');
      INSERT INTO data_modify (name, phone, sex) VALUES ('dms_c', '19000003','男');
    4. 单击确认确认执行变更

      单击确认后,系统执行SQL语句,流程结束。

      开发库执行成功

设置生产库的高风险SQL需提工单

DMS安全规则引擎可以根据SQL类型设置不同的审批流程。例如生产库中,DELETE语句会造成数据丢失,安全风险相对较大,可以为其设置更严格的审批流程,确保数据安全。接下来的示例将会演示如何将DELETE语句的审批流程配置为数据Owner+DBA,并提交数据工单申请。

  1. 设置审批流程。
    1. 以管理员账号登录DMS控制台
    2. 在顶部菜单栏,选择系统管理 > 安全管理 > 审批流程审批流程按钮
    3. 单击新增审批模板
    4. 配置如下信息,单击提交新增审批模板
      参数名称 说明
      模板名称 审批模板名称。
      备注 审批模板的备注信息。
      审批节点 单击增加节点增加审批节点。审批顺序从小到大,例如:0为第一位审批节点,1为第二位审批节点。
      说明 本示例为先由数据Onwer进行审批,再由DBA进行审批。

      单击提交后,审批流程页将新增一个审批模板,本示例中模板ID为770096

      审批模板列表
  2. 设置安全规则。
    1. 以管理员账号登录DMS控制台
    2. 在顶部菜单栏,选择系统管理 > 安全管理 > 安全规则安全规则路径
    3. 单击POC生产库规则右侧操作列下的编辑编辑生产库规则
    4. 详情页左侧的导航栏中,单击SQL变更
    5. 单击风险识别规则,并单击操作右侧的新增规则生产库新增规则
    6. 新增规则 - SQL变更对话框中,配置如下信息,单击提交新增规则-高风险操作
      配置项 说明
      检测点(必选) 选择风险识别规则,同时系统还支持其他三个检测点:
      • SQL执行规则
      • 风险审批规则
      • 批量数据导入规则
      模板库(可选) 系统会在不同的检测点下提供大量规则模板,详细请参见SQL变更
      说明 本示例为手动输入DSL语法。
      规则名称(必填) 创建规则名称为生产环境,DELETE语句为高风险操作
      规则DSL(必填) 输入如下规则DSL。
      if
          @fac.env_type in ['product','pre']
          and
          @fac.sql_type in
          [ 'DELETE']
      then
          @act.mark_risk 'high' '高风险:线上环境,生产环境, DELETE语句为高风险操作'
      end
    7. 在安全规则详情页,单击生产环境,DELETE语句为高风险操作规则右侧的启用按钮,并单击确认
      说明 单击 确认后,该条安全规则会立刻生效,即所有 DELETE语句都会被识别成高风险操作。
      生产库启用高风险规则
    8. 单击风险审批规则,并单击高风险审批流程右侧操作列下的编辑编辑高风险审批流程按钮
    9. 高风险审批流程中审批流程修改为770096,并单击提交

      即选择步骤1中创建的模板ID为770096的审批流程。

      提交高风险审批流程变更
    10. 单击高风险审批流程规则右侧的启用按钮,并单击确认启用高风险审批流程
  3. 执行DELETE语句。
    1. 以普通用户账号登录DMS控制台
    2. 在DMS对象列表中展开poc_prod实例,双击poc_prod数据库,即可进入SQL Console页。进入poc_dev库
    3. 在SQL Console窗口中,输入如下语句并单击执行

      查询data_modify表,可以看到3条初始化数据。

      SELECT * FROM `data_modify` ;
      查询生产库初始化数据
    4. 在SQL Console窗口中,输入如下语句并单击执行

      删除1行数据。

      DELETE FROM data_modify WHERE id = 1; 
    5. 单击申请数据变更
      说明 根据安全规则的设定,生产库中执行 DELETE语句属于高风险操作,需要提交工单且需要经数据Owner与DBA的审批才可执行。
      申请DELETE数据变更
    6. 创建SQL变更工单弹窗中,配置如下信息。创建SQL变更工单
      配置项 说明
      原因类别(必选) 根据实际情况选择数据导入的原因。
      业务背景(必选) 详细填写本次操作的业务背景。
      相关人(可选) 被设置的人员可查看工单并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
      执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持:
      • 审批通过后,自动执行
      • 最后审批人执行
      影响行数(必填) 预估本次更新会影响的数据行数,可在SQL Console以count统计。
      回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。
    7. 单击确认,此时系统将自动生成工单,请继续单击查看工单查看工单
    8. 工单详情页中,确认工单详情信息。
      说明 您可以在 工单详情页中,查看工单的详情信息,同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。
      生产库delete工单确认
    9. 确认信息无误且预检查通过后,单击提交审批,并等待审批完成。提交审批按钮
      说明
      • 在提交审批前,您可以修改工单内容和定时配置,一旦提交审批后,将不能修改相关信息。
      • 在工单中,您还可以查看审批详情与进展,可以看到该条变更的审批节点由数据Owner与DBA组成,本示例中数据Owner和DBA为同一位。关于审批的操作详情请参见审批数据变更工单审批进展
    10. 待审批通过后,单击执行变更,配置如下信息,单击确定执行执行变更任务设置
      配置项 说明
      是否立即执行 选择是否立即执行,支持:
      • 立即执行:提交即刻执行。
      • 定时执行:按需指定在业务特定时间执行。
      默认为立即执行。
      是否事务控制 选择是否开启事务控制,支持:
      • 开启:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
      • 关闭:逐条提交,遇到失败则终止但不回滚。
      默认为关闭。
      是否备份数据 选择是否备份数据,支持:
      • 开启:针对UPDATEDELETE语句将要影响数据,系统生成对应的INSERT脚本附件,对原数据进行备份。
      • 关闭:不生成备份附件。
      默认为开启。
      说明 在创建工单时,若 执行方式选择为 审批通过后,自动执行,系统会自动跳过此步骤。
    11. 系统将自动执行,工单结束。

      待执行成功后,您可通过单击详情按钮,查看执行日志详细,包括执行语句、执行所用时间、调度详情等信息。

设置生产库禁止执行TRUNCATE语句

DMS安全规则引擎可以根据SQL类型设置不同的执行路径。TRUNCATE语句会直接清空表中所有的数据,一般在生产库中是不会执行的,如果执行的话会造成大量数据丢失的问题。您可以通过安全规则引擎禁止TRUNCATE语句执行。接下来的示例将会演示如何在安全规则中设置禁止执行TRUNCATE语句,并提交TRUNCATE语句进行验证。

  1. 设置安全规则。
    1. 以管理员账号登录DMS控制台
    2. 在顶部菜单栏,选择系统管理 > 安全管理 > 安全规则安全规则路径
    3. 单击POC生产库规则右侧操作列下的编辑编辑生产库规则
    4. 详情页左侧的导航栏中,单击SQL变更,并单击SQL执行规则
    5. 找到允许TRUNCATE在SQL控制台直接执行规则名,单击右侧的编辑编辑TRUNCATE规则
    6. 将规则名修改为禁止TRUNCATE执行,并替换如下规则DSL,并单击提交编辑安全规则-禁止truncate执行
      if
          @fac.sql_type in
            ['TRUNCATE']
      then
          @act.forbid_execute
      end
      说明 该段安全规则DSL表示:禁止执行 TRUNCATE语句(禁止SQL Console直接执行与提交工单执行)。更多安全规则语法介绍请参见 安全规则DSL语法
    7. 单击禁止TRUNCATE执行规则右侧的启用按钮,并单击确认启用禁止Truncate执行规则
  2. 在SQL Console执行TRUNCATE语句。
    1. 以普通用户账号登录DMS控制台
    2. 在DMS对象列表中展开poc_prod实例,双击poc_prod数据库,即可进入SQL Console页。进入poc_dev库
    3. 在SQL Console窗口中,输入如下语句并单击执行

      删除data_modify表。

      TRUNCATE TABLE `data_modify`;
      说明 根据安全规则的设定,系统禁止执行 TRUNCATE语句。
      执行truncate命令
  3. 提交数据工单执行TRUNCATE语句。
    1. 以普通用户账号登录DMS控制台
    2. 单击顶部导航栏的数据方案 > 数据变更 > 普通数据变更普通数据变更按钮
    3. 配置如下信息,并单击提交申请提交truncate执行工单
      参数名 说明
      数据库(必填) 选择poc_prod库。
      原因类别(必填) 选择数据变更的原因,方便后续查找。
      业务背景(必填) 详细描述变更原因或目标,减少沟通成本。
      变更相关人(选填) 设置的相关人员都可查看工单,并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
      执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持:
      • 审批通过后,自动执行
      • 最后审批人执行
      影响行数(必填) 预估本次更新会影响的数据行数,可在SQLConsolecount统计。
      变更SQL(必填) 输入如下TRUNCATE语句。
      TRUNCATE TABLE `data_modify`;
      回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。
    4. 提交工单后,系统显示预检查失败。truncate工单预检查失败
      说明 根据安全规则的设定,系统禁止执行TRUNCATE语句。