数据管理DMS安全规则提供的SQL窗口模块支持关系型数据库和非关系型数据库。本文以关系型数据库MySQL为例,介绍配置SQL窗口规则的方法。

SQL窗口模块检测点

检测点 规则说明
基础配置项 规则集的基础配置,包括单次查询最大返回行数、结果集是否支持编辑、是否允许对敏感数据进行计算等。
SQL执行数量规范 控制单次提交SQL的个数。
DQL SQL规范 增加执行DQL SQL类型的限制。
其他SQL规范 对执行不同类型的SQL进行约束,例如,运行未识别SQL执行、禁止全表DELETE执行等。
SQL权限规范 控制SQL库表、敏感列、行权限等。
SQL执行性能规范 禁止执行影响行数或表空间超过阈值的DDL、DML。
库表列权限识别异常规范 当DQL、DML、DDL或DCL SQL解析异常时,是否允许继续执行SQL或拒绝执行特定SQL类型。
逻辑库SQL执行规范 对执行不同类型的SQL进行约束。
说明 功能模块的检测点中内置了大量的配置和规则,您可以根据实际需求调整配置值、规则状态,或自定义新规则。具体操作,请参见配置安全规则

检测点工作流程图:

7安全与规范 安全规则-检查点流程图-关系型MySQL.png

因子和动作

  • 因子:系统内置变量,可用来获取安全规则校验的上下文信息,如获取命令类型、影响行数等。
    • 因子全部以@fac.开头,后接因子名称。
    • 每个模块的不同检测点会提供不同因子。
    表 1. 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子类。详情请参见DMS支持的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.开头,后接动作名称。
    • 每个模块的不同检测点会提供不同动作。
    表 2. 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 不对无权限的敏感列进行数据脱敏。

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