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

注意事项

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

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

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

  1. 设置安全规则。
    说明 默认的安全规则规定以工单的方式执行所有DML(Data Manipulation Language)语句。
  2. 执行INSERT语句。
    1. 以普通用户账号,登录DMS数据管理服务
    2. 在顶部菜单栏中,选择SQL窗口 > SQL窗口
    3. 请先选择数据库弹框中,搜索并选择poc_prod数据库,单击确认
    4. 在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','男');
    5. 单击申请数据变更
      说明 由于默认的安全规则规定了INSERT语句不能在SQL Console直接执行,而是通过提交数据变更工单的方式执行数据变更,所以系统提示需要提交数据变更工单。
      申请数据变更
    6. 创建SQL变更工单对话框中,配置如下信息:
      配置项 说明
      原因类别(必选) 根据实际情况选择插入数据的原因。
      业务背景(必选) 详细填写本次操作的业务背景。
      相关人(可选) 被设置的人员可查看工单并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
      执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持:
      • 审批通过后,自动执行
      • 最后审批人执行
      SQL文本(必填) 等待变更的SQL文本。
      影响行数(必填) 本次更新会影响的数据行数,可在SQL Console以count统计。
      回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。
    7. 单击确认,在生成工单成功的弹框中,单击生成的工单号,进入普通数据变更工单详情页面。
      说明 您可以在顶部导航栏选择数据库开发 > 研发空间 > 我的工单,查看工单的详情信息。同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。
    8. 确认信息无误且预检查通过后,单击提交审批,并等待审批完成。提交审批按钮
      说明
      • 在提交审批前,您可以修改工单内容,一旦提交审批后,将不能修改相关信息。
      • 关于审批的操作详情请参见审批数据变更工单
      • 您可以在审批页签下,单击查看审批详情查询审批进度。数据变更-查看审批详情
    9. 待审批通过后,单击执行变更,配置以下信息:shenpi
      配置项 说明
      执行策略 选择是否立即执行策略,支持如下:
      • 立即执行(默认):提交即刻执行。
      • 定时执行:指定特定时间开始执行任务。
      开启整体事务 选择是否开启整体事务,支持:
      • 开启:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
      • 关闭(默认):逐条提交,遇到失败则终止但不回滚。
      开启备份 选择是否开启备份,支持:
      • 开启(默认):针对本次变更中的UPDATE以及DELETE语句,涉及的数据进行整行备份,可以用于误操作的回滚。
        说明 备份内容以REPLACE INTO语句放在DMS内的OSS存储中。
      • 关闭:不生成备份附件。
    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. 在顶部菜单栏中,选择SQL窗口 > SQL窗口
    3. 请先选择数据库弹框中,搜索并选择poc_dev数据库,单击确认
    4. 在SQL Console窗口中,输入如下语句并单击执行
      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','男');
    5. 单击确认,系统执行SQL语句,流程结束。

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

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

  1. 设置审批流程。
    1. 以管理员账号,登录DMS数据管理服务
    2. 在顶部菜单栏中,选择安全与规范 > 审批流程
    3. 单击新增审批模板
    4. 配置如下信息:
      参数名称 说明
      模板名称 审批模板名称。
      备注 审批模板的备注信息。
      审批节点 单击增加节点增加审批节点。审批顺序从小到大,例如:0为第一位审批节点,1为第二位审批节点。
      说明 本示例为先由数据Owner进行审批,再由DBA进行审批。
  2. 单击提交
  3. 设置安全规则。
    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. 单击提交
    8. 在安全规则详情页,单击生产环境,DELETE语句为高风险操作规则右侧的启用按钮,并单击确认
      说明 单击确认后,该条安全规则会立刻生效,即所有DELETE语句都会被识别成高风险操作。
    9. 检测点选择风险审批规则,选择高风险审批流程,单击其右侧的编辑
    10. 高风险审批流程中审批流程修改为步骤1中创建的模板ID,并单击提交提交高风险审批流程变更
    11. 单击高风险审批流程规则右侧的启用按钮,再单击确认
  4. 执行DELETE语句。
    1. 以普通用户账号,登录DMS数据管理控制台
    2. 在顶部菜单栏中,选择SQL窗口 > SQL窗口
    3. 请先选择数据库弹框中,搜索并选择poc_prod数据库,单击确认
    4. 在SQL Console窗口中,输入如下语句并单击执行
      SELECT * FROM `data_modify` ;
      说明 查询data_modify表,可以看到3条初始化数据。
      查询生产库初始化数据
    5. 在SQL Console窗口中,输入如下语句并单击执行
      DELETE FROM data_modify WHERE id = 1; 
      说明 删除1行数据。
    6. 单击申请数据变更
      说明 根据安全规则的设定,生产库中执行DELETE语句属于高风险操作,需要提交工单且需要经数据Owner与DBA的审批才可执行。
      申请DELETE数据变更
    7. 创建SQL变更工单对话框中,配置如下信息:
      配置项 说明
      原因类别(必选) 根据实际情况选择删除数据的原因。
      业务背景(必选) 详细填写本次操作的业务背景。
      相关人(可选) 被设置的人员可查看工单并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
      执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持:
      • 审批通过后,自动执行
      • 最后审批人执行
      影响行数(必填) 预估本次更新会影响的数据行数,可在SQL Console以count统计。
      SQL文本(必填) 等待变更的SQL文本。
      回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。
    8. 单击确认,在生成工单成功对话框中,单击生成的工单号,进入工单详情页。
      说明 您也可以在顶部导航栏选择数据库开发 > 研发空间 > 我的工单,查看工单详细信息。
    9. 工单详情页中,确认工单详情信息。
      说明 您可以在工单详情页中,查看工单的详情信息,同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。
      生产库delete工单确认
    10. 确认信息无误且预检查通过后,单击提交审批,并等待审批完成。提交审批按钮
      说明
      • 在提交审批前,您可以修改工单内容,一旦提交审批后,将不能修改相关信息。
      • 在工单中,您还可以查看审批详情与进展,可以看到该条变更的审批节点由数据Owner与DBA组成,本示例中数据Owner和DBA为同一位。关于审批的操作详情请参见审批数据变更工单审批进展
    11. 待审批通过后,单击执行变更,配置如下信息:
      配置项 说明
      执行策略 选择是否立即执行策略,支持如下:
      • 立即执行(默认):提交即刻执行。
      • 定时执行:指定特定时间开始执行任务。
      开启整体事务 选择是否开启整体事务,支持:
      • 开启:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
      • 关闭(默认):逐条提交,遇到失败则终止但不回滚。
      开启备份 选择是否开启备份,支持:
      • 开启(默认):针对本次变更中的UPDATE以及DELETE语句,涉及的数据进行整行备份,可以用于误操作的回滚。
        说明 备份内容为REPLACE INTO语句,将放在OSS存储中。
      • 关闭:不生成备份附件。
    12. 单击确定执行

      执行成功后,您可在此工单详情页查看操作日志调度日志等信息。

设置生产库禁止执行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. 在顶部菜单栏中,选择SQL窗口 > SQL窗口
    3. 请先选择数据库弹框中,搜索并选择poc_prod数据库,单击确认
    4. 在SQL Console窗口中,输入如下语句并单击执行

      删除data_modify表。

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

      系统检查结果显示失败说明安全规则已生效。

      truncate工单预检查失败
      说明 根据安全规则的设定,系统禁止执行TRUNCATE语句。