您可以在DMS中通过SQL窗口直接输入SQL语法或通过数据变更工单提交数据变更。同时,您可以自定义安全规则,实现对不同环境库定义不同的数据变更执行配置。本文将通过以下4个例子向您介绍典型场景下的安全规则设定与对应提交数据变更的方式。
注意事项
Poc_dev
实例的安全规则为POC开发库规则
。Poc_prod
实例的安全规则为POC生产库规则
。
通过提交工单执行数据变更
本示例以提交工单的方式执行INSERT
语句。
- 设置安全规则。说明 默认的安全规则规定以工单的方式执行所有DML(Data Manipulation Language)语句。
- 执行
INSERT
语句。- 以普通用户账号,登录DMS数据管理服务。
- 在顶部菜单栏中,选择SQL窗口 > SQL窗口。
- 在请先选择数据库弹框中,搜索并选择
poc_prod
数据库,单击确认。 - 在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','男');
- 单击申请数据变更。
说明 由于默认的安全规则规定了
INSERT
语句不能在SQL Console直接执行,而是通过提交数据变更工单的方式执行数据变更,所以系统提示需要提交数据变更工单。 - 在创建SQL变更工单对话框中,配置如下信息:
配置项 说明 原因类别(必选) 根据实际情况选择插入数据的原因。 业务背景(必选) 详细填写本次操作的业务背景。 相关人(可选) 被设置的人员可查看工单并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。 执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持: - 审批通过后,自动执行
- 最后审批人执行
SQL文本(必填) 等待变更的SQL文本。 影响行数(必填) 本次更新会影响的数据行数,可在SQL Console以 count
统计。回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。 - 单击确认,在生成工单成功的弹框中,单击生成的工单号,进入普通数据变更工单详情页面。
说明 您可以在顶部导航栏选择数据库开发 > 研发空间 > 我的工单,查看工单的详情信息。同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。
- 确认信息无误且预检查通过后,单击提交审批,并等待审批完成。说明
- 在提交审批前,您可以修改工单内容,一旦提交审批后,将不能修改相关信息。
- 关于审批的操作详情请参见审批数据变更工单。
- 您可以在审批页签下,单击查看审批详情查询审批进度。
- 待审批通过后,单击执行变更,配置以下信息:
配置项 说明 执行策略 选择是否立即执行策略,支持如下: - 立即执行(默认):提交即刻执行。
- 定时执行:指定特定时间开始执行任务。
开启整体事务 选择是否开启整体事务,支持: - 开启:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
- 关闭(默认):逐条提交,遇到失败则终止但不回滚。
开启备份 选择是否开启备份,支持: - 开启(默认):针对本次变更中的
UPDATE
以及DELETE
语句,涉及的数据进行整行备份,可以用于误操作的回滚。说明 备份内容以REPLACE INTO语句放在DMS内的OSS存储中。 - 关闭:不生成备份附件。
- 单击确定执行。
执行成功后,您可在此工单详情页查看操作日志、调度日志等信息。
设置开发库可免工单执行DML语句
若开发库的数据变更均需提交工单执行,会导致开发人员研发效能下降。您可以通过DMS内置的安全规则引擎,设置允许研发人员直接在SQL Console对开发库执行DML语句,且不需要提交工单审批,即可实现在不影响数据安全的情况下提升研发效能。
本示例将在SQL Console对开发库执行INSERT
语句。
- 设置安全规则。
- 以管理员账号,登录DMS数据管理服务。
- 在顶部菜单栏中,选择安全与规范 > 安全规则。
- 在安全规则搜索框输入
POC开发库规则
,单击该规则行右侧操作列下的编辑。 - 在详情页左侧的导航栏中,单击SQL变更,检测点选择SQL执行规则。
- 找到允许所有DML在SQL控制台直接执行规则名,单击右侧的编辑。
- 将已有规则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表示:数据库环境类型不为product
或pre
的数据库可以直接执行UPDATE
、DELETE
、INSERT
等上述DML语句,数据库环境类型为product
或pre
的数据库需要通过提交工单执行上述DML语句。更多安全规则语法介绍请参见安全规则DSL语法。 - 启用允许所有DML在SQL控制台直接执行规则,并禁用与其对应的规则。说明
- 允许所有DML在SQL控制台直接执行规则对应的规则为禁止所有DML在SQL控制台直接执行,必须以工单方式执行规则。
- 若同时启用相对应的一组规则,系统将执行严管控原则。在本示例中,以工单的方式执行。
- 执行
INSERT
语句。- 以普通用户账号,登录DMS数据管理服务。
- 在顶部菜单栏中,选择SQL窗口 > SQL窗口。
- 在请先选择数据库弹框中,搜索并选择
poc_dev
数据库,单击确认。 - 在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','男');
- 单击确认,系统执行SQL语句,流程结束。
设置生产库的高风险SQL需提工单
DMS安全规则引擎可以根据SQL类型设置不同的审批流程。例如生产库中,DELETE
语句会造成数据丢失,安全风险相对较大,可以为其设置更严格的审批流程,确保数据安全。接下来的示例将会演示如何将DELETE
语句的审批流程配置为数据Owner+DBA,并提交数据工单申请。
- 设置审批流程。
- 以管理员账号,登录DMS数据管理服务。
- 在顶部菜单栏中,选择安全与规范 > 审批流程。
- 单击新增审批模板。
- 配置如下信息:
参数名称 说明 模板名称 审批模板名称。 备注 审批模板的备注信息。 审批节点 单击增加节点增加审批节点。审批顺序从小到大,例如:0为第一位审批节点,1为第二位审批节点。 说明 本示例为先由数据Owner进行审批,再由DBA进行审批。
- 单击提交。
- 设置安全规则。
- 以管理员账号,登录DMS数据管理控制台。
- 在顶部菜单栏中,选择安全与规范 > 安全规则。
- 单击
POC生产库规则
右侧操作列下的编辑。 - 在详情页左侧导航栏中,单击SQL变更。
- 检测点选择风险识别规则,单击新增规则。
- 在新增规则 - 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
- 单击提交。
- 在安全规则详情页,单击生产环境,DELETE语句为高风险操作规则右侧的启用按钮,并单击确认。
说明 单击确认后,该条安全规则会立刻生效,即所有
DELETE
语句都会被识别成高风险操作。 - 检测点选择风险审批规则,选择高风险审批流程,单击其右侧的编辑。
- 将高风险审批流程中审批流程修改为步骤1中创建的模板ID,并单击提交。
- 单击高风险审批流程规则右侧的启用按钮,再单击确认。
- 执行
DELETE
语句。- 以普通用户账号,登录DMS数据管理控制台。
- 在顶部菜单栏中,选择SQL窗口 > SQL窗口。
- 在请先选择数据库弹框中,搜索并选择
poc_prod
数据库,单击确认。 - 在SQL Console窗口中,输入如下语句并单击执行。
SELECT * FROM `data_modify` ;
说明 查询data_modify
表,可以看到3条初始化数据。 - 在SQL Console窗口中,输入如下语句并单击执行。
DELETE FROM data_modify WHERE id = 1;
说明 删除1行数据。 - 单击申请数据变更。
说明 根据安全规则的设定,生产库中执行
DELETE
语句属于高风险操作,需要提交工单且需要经数据Owner与DBA的审批才可执行。 - 在创建SQL变更工单对话框中,配置如下信息:
配置项 说明 原因类别(必选) 根据实际情况选择删除数据的原因。 业务背景(必选) 详细填写本次操作的业务背景。 相关人(可选) 被设置的人员可查看工单并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。 执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持: - 审批通过后,自动执行
- 最后审批人执行
影响行数(必填) 预估本次更新会影响的数据行数,可在SQL Console以 count
统计。SQL文本(必填) 等待变更的SQL文本。 回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。 - 单击确认,在生成工单成功对话框中,单击生成的工单号,进入工单详情页。
说明 您也可以在顶部导航栏选择数据库开发 > 研发空间 > 我的工单,查看工单详细信息。
- 在工单详情页中,确认工单详情信息。
说明 您可以在工单详情页中,查看工单的详情信息,同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。
- 确认信息无误且预检查通过后,单击提交审批,并等待审批完成。说明
- 在提交审批前,您可以修改工单内容,一旦提交审批后,将不能修改相关信息。
- 在工单中,您还可以查看审批详情与进展,可以看到该条变更的审批节点由数据Owner与DBA组成,本示例中数据Owner和DBA为同一位。关于审批的操作详情请参见审批数据变更工单。
- 待审批通过后,单击执行变更,配置如下信息:
配置项 说明 执行策略 选择是否立即执行策略,支持如下: - 立即执行(默认):提交即刻执行。
- 定时执行:指定特定时间开始执行任务。
开启整体事务 选择是否开启整体事务,支持: - 开启:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
- 关闭(默认):逐条提交,遇到失败则终止但不回滚。
开启备份 选择是否开启备份,支持: - 开启(默认):针对本次变更中的
UPDATE
以及DELETE
语句,涉及的数据进行整行备份,可以用于误操作的回滚。说明 备份内容为REPLACE INTO语句,将放在OSS存储中。 - 关闭:不生成备份附件。
- 单击确定执行。
执行成功后,您可在此工单详情页查看操作日志、调度日志等信息。
设置生产库禁止执行TRUNCATE语句
DMS安全规则引擎可以根据SQL类型设置不同的执行路径。TRUNCATE
语句会直接清空表中所有的数据,一般在生产库中是不会执行的,如果执行的话会造成大量数据丢失的问题。您可以通过安全规则引擎禁止TRUNCATE
语句执行。接下来的示例将会演示如何在安全规则中设置禁止执行TRUNCATE
语句,并提交TRUNCATE
语句进行验证。
- 设置安全规则。
- 以管理员账号,登录DMS数据管理控制台。
- 在顶部菜单栏中,选择安全与规范 > 安全规则。
- 单击
POC生产库规则
右侧操作列下的编辑。 - 在详情页左侧的导航栏中,单击SQL变更,并单击SQL执行规则。
- 找到允许TRUNCATE在SQL控制台直接执行规则名,单击右侧的编辑。
- 将规则名修改为
禁止TRUNCATE执行
,并替换如下规则DSL,并单击提交。if @fac.sql_type in ['TRUNCATE'] then @act.forbid_execute end
说明 该段安全规则DSL表示:禁止执行TRUNCATE
语句(禁止SQL Console直接执行与提交工单执行)。更多安全规则语法介绍请参见安全规则DSL语法。 - 单击禁止TRUNCATE执行规则右侧的启用按钮,并单击确认。
- 在SQL Console执行
TRUNCATE
语句。- 以普通用户账号,登录DMS数据管理服务。
- 在顶部菜单栏中,选择SQL窗口 > SQL窗口。
- 在请先选择数据库弹框中,搜索并选择
poc_prod
数据库,单击确认。 - 在SQL Console窗口中,输入如下语句并单击执行。
删除
data_modify
表。TRUNCATE TABLE `data_modify`;
说明 根据安全规则的设定,系统禁止执行TRUNCATE
语句。
- 提交数据工单执行
TRUNCATE
语句。- 以普通用户账号,登录DMS数据管理服务。
- 在顶部菜单栏中,选择数据库开发 > 数据变更 > 普通数据变更。
- 配置如下信息,并单击提交申请。
参数名 说明 数据库(必填) 选择 poc_prod
库。原因类别(必填) 选择数据变更的原因,方便后续查找。 业务背景(必填) 详细描述变更原因或目标,减少沟通成本。 变更相关人(选填) 设置的相关人员都可查看工单,并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。 执行方式(必填) 选择审批通过后,提交者执行(默认),同时还支持: - 审批通过后,自动执行
- 最后审批人执行
影响行数(必填) 预估本次更新会影响的数据行数,可在SQLConsole以 count
统计。变更SQL(必填) 选择文本或附件。此处选择的是文本。 SQL文本(必填) 选择输入如下 TRUNCATE
语句。TRUNCATE TABLE `data_modify`;
回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。 - 提交工单后,确认预检查结果。
系统检查结果显示失败说明安全规则已生效。
说明 根据安全规则的设定,系统禁止执行TRUNCATE语句。