您可以在DMS中通过SQL窗口直接输入SQL语法或通过数据变更工单提交数据变更。同时,您可以自定义安全规则,实现对不同环境库定义不同的数据变更执行配置。本文将通过以下4个例子向您介绍典型场景下的安全规则设定与对应提交数据变更的方式。
准备工作
- 本文已通过DMS的结构设计功能在安全协同模式的 - poc_prod生产库和- poc_dev开发库下创建- data_modify表。您也可以通过DMS的SQL Console创建- data_modify表,免提工单执行DDL语句的操作,请参见免提工单执行DML语句。
- POC_prod实例关联的安全规则为POC生产规则,POC_dev实例关联的安全规则为POC开发规则。 
通过提交工单执行普通数据变更
本示例以提交工单的方式给poc_prod库下的data_modify表中插入数据。
- 登录数据管理DMS 5.0。 
- 单击控制台左上角的  图标,选择。说明 图标,选择。说明- 若您使用的是非极简模式的控制台,在顶部菜单栏中,选择。 
- 配置工单信息。部分配置信息说明如下: - SQL文本:输入语法正确的、可直接执行的SQL语句。多条SQL之间,使用英文分号 - ;隔开。
- 附件:变更SQL附件与回滚SQL附件仅支持 - .txt、- .zip和- .sql文件类型,且最大不能超过15 MB。
 
- 单击提交申请。 - 提交申请后,系统会自动进行预检查,如果预检查没有通过,根据提示修改SQL,然后重试。 
- 预检查通过后,单击提交审批,在提示对话框中单击确认。 说明- 数据变更默认审批模板的审批人为DBA。更改默认审批模板,请参见修改默认审批模板。 
- 审批通过后,单击执行变更,在任务设置对话框中设置任务执行参数,并单击确定执行。 说明- 创建工单时,如果执行方式选择审批通过后,自动执行,系统会自动跳过此步骤。 
- 已暂停的任务重启后,将从暂停位置继续执行脚本。 
 - 配置项 - 说明 - 执行策略 - 选择是否立即执行策略,支持如下: - 立即执行(默认):提交即刻执行。 
- 定时执行:指定特定时间开始执行任务。 
 - 开启整体事务 - 选择是否开启整体事务,默认关闭。 - 开启:执行失败则全部回滚(仅限DML,DDL不在范围内)。 
- 关闭:逐条提交SQL任务,执行失败则终止任务,但不回滚。 
 - 开启备份 - 选择是否开启备份,默认开启。 说明- 仅执行 - UPDATE和- DELETE语句时,支持备份数据。
- MongoDB和Redis不支持备份数据。 
 - 开启:执行 - UPDATE、- DELETE语句前,系统自动生成对应的备份脚本附件。- 如果数据库类型为MySQL和MariaDB,生成 - REPLACE INTO备份语句。说明- MySQL包括:RDS MySQL、PolarDB MySQL版、PolarDB分布式版、其他来源MySQL。 
- 如果数据库类型为除MySQL、MariaDB外的其他引擎,生成 - INSERT备份语句。
 
- 关闭:不生成备份附件。 
 
- (可选)工单执行成功后,进入poc_prod数据库的SQL窗口,查看数据变更是否符合预期。 
设置开发库免提工单执行DML语句
若开发库的数据变更均需提交工单执行,会导致开发人员研发效能下降。您可以通过DMS内置的安全规则引擎,设置允许开发人员直接在SQL Console对开发库执行DML语句,且不需要提交工单审批,即可实现在不影响数据安全的情况下提升研发效能。
本示例以在SQL Console执行INSERT语句举例。
- 调整poc_dev库的安全规则POC开发库规则。 说明- DMS默认的安全规则规定以工单的方式执行DML(Data Manipulation Language)语句。 - 以管理员账号登录数据管理DMS 5.0。 
- 单击控制台左上角的  图标,选择。说明 图标,选择。说明- 若您使用的是非极简模式的控制台,在顶部菜单栏中,选择。 
- 在安全规则列表中,单击POC开发库规则右侧操作列下的编辑。 
- 在左侧导航列表区域,单击SQL变更,检测点选择SQL执行规则。 
- 启用允许所有DML在SQL控制台直接执行规则,并禁用禁止所有DML在SQL控制台直接执行,必须以工单方式执行规则。 
 
- 给data_modify表中插入数据。 - 在首页左侧的数据库实例区域,搜索并单击poc_dev数据库。 
- 在SQL Console中,输入如下 - INSERT语句并单击执行。- 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','男');
- 在执行确认对话框中,单击直接执行。出现执行成功提示表示安全规则调整成功。 
 
设置生产库的高风险SQL需提工单
DMS安全规则引擎可以根据SQL类型设置不同的审批流程。例如生产库中,DELETE语句会造成数据丢失,安全风险相对较大,可以为其设置更严格的审批流程,确保数据安全。
本示例以设置DELETE语句为高风险SQL,并指定执行DELETE语句工单的审批流程举例。
- 设置审批流程。 - 以管理员账号登录DMS数据管理服务。 
- 单击控制台左上角的  图标,选择。说明 图标,选择。说明- 若您使用的是非极简模式的控制台,在顶部菜单栏中,选择。 
- 单击新增审批模板,在新增审批模板面板中配置模板相关信息。 - 审批节点:单击增加节点增加审批节点。审批顺序从小到大,例如1为第一位审批节点,2为第二位审批节点。 
- 配置完成后,单击提交。 
 
- 设置安全规则。 - 单击控制台左上角的  图标,选择。说明 图标,选择。说明- 若您使用的是非极简模式的控制台,在顶部菜单栏中,选择。 
- 在安全规则列表中,单击POC生产库规则右侧操作列下的编辑。 
- 在详情页左侧导航栏中,单击SQL变更。 
- 检测点选择风险识别规则,单击新增规则。 
- 在新增规则 - SQL变更对话框中,配置规则信息。 - 部分配置信息说明如下: - 配置项 - 说明 - 规则名称(必填) - 创建规则名称为 - 生产环境,DELETE语句为高风险操作。- 规则DSL(必填) - 输入如下规则DSL: - if @fac.env_type in ['product','pre'] and @fac.sql_type in [ 'DELETE'] then @act.mark_risk 'high' '高风险:线上环境,生产环境, DELETE语句为高风险操作' end
- 单击提交。 
- 单击生产环境,DELETE语句为高风险操作规则右侧的启用按钮,并单击确认。 - 单击确认后,该规则会立即生效,即所有 - DELETE语句都会被识别为高风险操作。
- 检测点选择风险审批规则,选择高风险审批流程,单击其右侧的编辑。 
- 将高风险审批流程中规则DSL区域的模板ID修改为步骤1中创建的模板ID,并单击提交。 
- 单击高风险审批流程规则右侧的启用按钮,再单击确认。 
 
- 执行 - DELETE语句。- 在首页左侧的数据库实例区域,搜索并单击 - poc_prod数据库。
- 在SQL Console中,输入如下 - DELETE语句并单击执行。- DELETE FROM data_modify WHERE id = 1;
- 执行结果区域显示由于安全规则导致执行失败,您可单击申请数据变更,通过提交工单执行 - DELETE语句。说明- 在该生产库中执行 - DELETE语句属于高风险操作,需要提交工单且需要指定审批模板中的审批人通过后才可执行。
 
设置生产库禁止执行TRUNCATE语句
TRUNCATE语句会直接清空表中所有数据,一般在生产库中是不会执行的,如果执行的话会造成大量数据丢失的问题。您可以通过安全规则禁止TRUNCATE语句执行。
本示例以禁止生产库在SQL Console或提交工单执行TRUNCATE语句为例。
- 调整安全规则。 - 以管理员账号登录DMS数据管理控制台。 
- 单击控制台左上角的  图标,选择。说明 图标,选择。说明- 若您使用的是非极简模式的控制台,在顶部菜单栏中,选择。 
- 在安全规则列表中,单击 - POC生产库规则右侧操作列下的编辑。
- 在左侧导航栏中,单击SQL变更,检测点选择SQL执行规则。 
- 找到允许TRUNCATE在SQL控制台直接执行规则名,单击右侧操作列下的编辑。 
- 将规则名修改为 - 禁止TRUNCATE执行,并替换原规则DSL为如下DSL,再单击提交。- if @fac.sql_type in ['TRUNCATE'] then @act.forbid_execute end说明- 该段安全规则DSL表示禁止在SQL Console或提交工单执行 - TRUNCATE语句。更多安全规则语法介绍请参见安全规则DSL语法。
- 单击禁止TRUNCATE执行规则右侧的启用按钮,并单击确认。 
 
- 在SQL Console执行 - TRUNCATE语句。- 在首页左侧的数据库实例区域,搜索并单击 - poc_prod数据库。
- 在SQL Console中,输入如下 - TRUNCATE语句并单击执行。- TRUNCATE TABLE `data_modify`;
- 显示执行失败。由于设置的安全规则,系统禁止在SQL Console执行 - TRUNCATE语句。
 
- 提交数据工单执行 - TRUNCATE语句。提交工单的操作,请参见通过提交工单执行普通数据变更。说明- 在数据变更工单的变更SQL参数中填入如下SQL: - TRUNCATE TABLE `data_modify`;- 提交工单后,系统将会显示预检查失败,说明禁止通过提交工单执行 - TRUNCATE语句的安全规则已生效。