全部产品

SQL窗口-关系型数据库

更新时间:2020-08-28 18:06:53

数据管理DMS提供的SQL窗口支持关系型数据库和非关系型数据库,安全规则的定义和分类各不相同。本文档介绍关系型数据库的SQL窗口安全规则。

默认规则说明

  • SQL类型限制:查询类的SQL不限制,针对DML、DDL和DCL以及其他一些系统未识别的SQL均会默认拦截不予执行,若用户需要在此处执行DML、DDL或DCL命令,则需要自行设置并启用相应安全规则使这些SQL可以被顺利执行。
  • 库表列权限限制:默认行为不限制,若您需要控制库表权限、敏感字段权限等,请在SQL权限规范检查点中设置并启用规则。

基础配置项

  • 单次查询最大返回行数:定义查询结果最多返回多少行。

    替代原配置管理中的单次查询SQL最大的行数

  • 单次查询包含敏感列条件的最大返回行数:定义包含敏感列的查询结果最多返回多少行。

    替代原配置管理中的单次查询包含敏感列条件的SQL最大的行数

  • 限制允许SQL全表扫描的最大值(MB):仅MySQL和Oracle实例有效,在查询SQL执行前检查执行计划,若扫描大小超过此阈值,则拒绝SQL执行。

  • 关闭执行变更SQL校验影响行数和提示:是否关闭在执行变更SQL时进行预校验影响行数并弹框提示。默认为不关闭。
  • 结果集翻页支持最多翻多少行:控制SQL窗口的查询结果集最多支持翻多少行记录。
  • 结果集是否支持翻页:控制SQL窗口的查询结果集是否支持翻页。
  • 结果集是否支持编辑:控制SQL窗口的查询结果集是否支持编辑。

检测点

  • SQL执行数量规范:可控制单次提交的SQL个数。
  • DQL规范:可增加对DQL类型SQL执行的限制。
  • 其他SQL规范:可对多种SQL的执行进行约束。

    如高危SQL,每个企业对高危SQL的定义不同,可能包含部分DML种类、部分DCL种类,部分DDL种类的SQL。数据管理DMS无法识别的SQL也可以在此进行约束。

  • SQL权限规范:对SQL执行权限进行约束。

    如提交者是否拥有对应的库、表、列权限。

  • SQL执行性能规范:对待执行的SQL进行性能方面的约束。

    如DML影响行数超过阈值,拒绝执行,DDL涉及到的表空间超过阈值,拒绝执行等。

  • 库表列权限识别异常规范:通常DMS会对用户提交的SQL进行SQL语法解析并对访问的库表列资源进行权限校验,然而仍不支持部分复杂的SQL。当复杂的SQL解析异常导致无法正常下发时,可通过配置库表列权限识别异常规范中的规则,让SQL顺利执行。

    注意:库表列权限识别异常规范会导致SQL权限规范SQL规范校验SQL执行性能规范等安全规则失效。

  • 逻辑库SQL执行规范:为逻辑库查询预留的检测点,不适用于物理库查询。

您可以使用安全规则模板库中提供的规则,也可以自定义新增规则。详情请参见新增规则操作步骤

检测点流程图

检测点流程图

DMS支持的SQL

SQL分类 SQL子类
DQL
  • SELECT
  • DESC
  • EXPLAIN
  • SHOW
DML
  • INSERT
  • INSERT_SELECT
  • REPLACE
  • REPLACE_INTO
  • UPDATE
  • DELETE
  • MERGE
DDL
  • DATABASE_OP
  • CREATE
  • CREATE_INDEX
  • CREATE_VIEW
  • CREATE_SEQUENCE
  • CREATE_TABLE
  • CREATE_SELECT
  • TRUNCATE
  • DROPDROP_INDEX
  • DROP_VIEW
  • DROP_TABLE
  • RENAME
  • ALTER
  • ALTER_INDEX
  • ALTER_VIEW
  • ALTER_TABLE
  • ALTER_SEQUENCE
  • CREATE_FUNCTION
  • CREATE_PROCEDURE
  • ALTER_FUNCTION
  • ALTER_PROCEDURE
  • DROP_FUNCTION
  • DROP_PROCEDURE
DCL
  • GRANT
  • DECLARE
  • SET
  • ANALYZE
  • FLUSH
  • OPTIMIZE
  • KILL

因子和动作

  • 因子:因子是系统内置变量,可用来获取安全规则校验的上下文信息,如获取SQL类型、影响行数等。因子全部以@fac.开头,后接因子名称。每个模块的不同检测点均提供不同因子,SQL窗口中提供因子的说明请参见下表:

    因子名 说明
    @fac.sql_count 单次提交的SQL条数。
    @fac.select_sql_count 单次提交的SQL中查询类SQL的条数。
    @fac.dml_sql_count 单次提交的SQL中DML SQL的条数。
    @fac.sql_type SQL分类。取值请参见DMS支持的SQL
    @fac.sql_sub_type SQL子类,取值参考附录-SQL类型枚举中的定义。
    @fac.env_type环境类型,值是环境标识。如:DEVPRODUCT。详情请参见实例环境说明
    @fac.fulltable_delete当前SQL是否为全表DELETE。取值为:
    • true
    • false
    @fac.fulltable_update 当前SQL是否为全表UPDATE。取值为:
    • true
    • false
    @fac.current_sql 当前的SQL。
    @fac.user_is_admin 当前用户是否为管理员。取值为:
    • true
    • false
    @fac.user_is_dba 当前用户是否是DBA。取值为:
    • true
    • false
    @fac.user_is_inst_dba 当前用户是否是当前实例的DBA。取值为:
    • true
    • false
    @fac.user_is_sec_admin 当前用户是否是安全管理员。取值为:
    • true
    • false
    @fac.sql_affected_rows 当前SQL执行的SQL影响行数。(会执行COUNT操作,请谨慎使用。)
    @fac.sql_relate_table_store_size
    当前SQL访问的表的预估空间总大小(MB)。(使用的是采集之后的预估值,非真实值。)
  • 动作:动作是满足if条件之后系统执行的行为,例如禁止提交工单、选择工作流、允许执行、拒绝执行等,这些动作表达了安全规则的主要目的。动作全部以@act.开头,后接动作名称。每个模块的不同检测点均提供不同动作,SQL窗口中提供动作的说明请参见下表:

    动作名 说明
    @act.reject_execute 拒绝执行当前SQL。
    @act.allow_execute 允许执行当前SQL。
    @act.reject_sql_type_execute 拒绝执行特定类型的SQL,需要指定具体的SQL子类型。例如:@act.reject_sql_type_execute 'UPDATE'
    @act.allow_sql_type_execute 允许执行特定类型的SQL,需要指定具体的SQL子类型。例如:@act.allow_sql_type_execute 'UPDATE'
    @act.check_dml_sec_column_permission 检查有无敏感列权限,如果没有,不执行DML变更。
    @act.uncheck_dml_sec_column_permission 不检查敏感列权限。
    @act.check_sql_access_permission 检查SQL操作权限,对访问的库、表、列是否有对应权限(查询、变更)。
    @act.uncheck_sql_access_permission 不检查SQL操作权限。
    @act.enable_sec_column_mask 对无权限的敏感列进行数据脱敏。
    @act.disable_sec_column_mask 不对无权限的敏感列进行数据脱敏。

模板库

安全规则提供了大量的规则模板可直接选择启用,也可以在模板基础上按照实际需求自行调整启用。SQL窗口中的模板如下所示:

检测点 模板
SQL执行数量规范 控制单次执行SQL个数。
控制单次执行SELECT SQL个数。
控制单次执行DML SQL个数。
DQL SQL规范 无。
其他SQL规范 允许未识别SQL执行。
禁止全表UPDATE执行。
禁止全表DELETE执行。
SQL权限规范 控制SQL库表权限校验。
控制查询敏感列脱敏。
控制敏感列数据的变更。
控制行权限校验。
SQL执行性能规范 禁止DML影响行数超过阈值执行。
禁止DDL表空间超过阈值执行。
库表列权限识别异常规范 允许DQL SQL解析异常继续执行【继续执行会导致权限规范失效】。
允许DML SQL解析异常继续执行【继续执行会导致权限规范失效】。
允许DDL SQL解析异常继续执行【继续执行会导致权限规范失效】。
允许DCL SQL解析异常继续执行【继续执行会导致权限规范失效】。
允许无法识别 SQL解析异常继续执行【继续执行会导致权限规范失效】。
逻辑库SQL执行规范 无。

新增规则操作步骤

  1. 登录DMS控制台

  2. 在页面顶部的导航栏中,单击系统管理 > 安全管理 > 安全规则
    新增安全规则

  3. 安全规则页签中,单击目标规则集右侧操作列中的编辑

  4. 详情页面左侧的导航栏中,单击SQL窗口

  5. SQL窗口页签中,单击操作右侧的新增规则
    新增安全规则1

  6. 新增规则 - SQL窗口对话框中,设置如下参数:

    参数 说明
    检测点(必选)选择需要增加规则的检测点。检测点的详情请参见检测点
    模板库(可选) 安全规则模板库中提供了大量规则模板,选择了检测点以后,您可以从模板库中按需加载规则模板。可选的模板库列表请参见模板库
    规则名称(必填) 自定义规则名称。(如您在模板库中选择了规则模板,此处会自动填充。)
    规则DSL(必填) 填写规则DSL,DSL语法请参见安全规则DSL语法。如您在模板库中选择了规则模板,此处会自动填充。
  7. 单击提交

  8. 新增的规则默认处于已禁用状态,单击规则右侧操作列中的启用

  9. 在弹出的对话框中单击确认