数据管理DMS安全规则提供的SQL窗口模块支持关系型数据库和非关系型数据库。本文以关系型数据库MySQL为例,介绍配置SQL窗口规则的方法。
SQL窗口模块检测点
检测点 | 规则说明 |
基础配置项 | 规则集的基础配置,包括单次查询最大返回行数、结果集是否支持编辑、是否允许对敏感数据进行计算等。 |
SQL执行数量规范 | 控制单次提交SQL的个数。 |
DQL SQL规范 | 增加执行DQL SQL类型的限制。 |
其他SQL规范 | 对执行不同类型的SQL进行约束,例如,允许未识别SQL执行(允许执行DMS不能识别的SQL命令)、禁止全表DELETE执行等。 |
SQL权限规范 | 控制SQL库表、敏感列、行权限等。 |
SQL执行性能规范 | 禁止执行影响行数或表空间超过阈值的DDL、DML。 |
库表列权限识别异常规范 | 当DQL、DML、DDL或DCL SQL解析异常时,是否允许继续执行SQL或拒绝执行特定SQL类型。 |
逻辑库SQL执行规范 | 对执行不同类型的SQL进行约束。 |
功能模块的检测点中内置了大量的配置和规则,您可以根据实际需求调整配置值、规则状态,或自定义新规则。具体操作,请参见配置安全规则。
检测点工作流程图:
因子和动作
因子:系统内置变量,可用来获取安全规则校验的上下文信息,如获取命令类型、影响行数等。
因子全部以
@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
环境类型,值为环境标识。如:
DEV
、PRODUCT
。详情请参见实例环境类型。@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
DML
INSERT
INSERT_SELECT
SELECT_INTO
MULTI_INSERT
REPLACE
REPLACE_INTO
UPDATE
DELETE
MERGE
REMOVE
MSCK_REPAIR
REFRESH_MATERIALIZED_VIEW
BEGIN
START_TRANSACTION
COMMIT
ROLLBACK
SAVEPOINT
RELEASE_SAVEPOINT
SET
ADD_EDGE
ADD_VERTEX
SET_PROPERTY
GDB_DROP
INSERT_MANY
INSERT_ONE
DELETE_MANY
DELETE_ONE
UPDATE_MANY
UPDATE_ONE
WLM_ADD_RULE
DDL
CREATE
CREATE_SCHEMA
CREATE_INDEX
CREATE_VIEW
CREATE_SEQUENCE
CREATE_TABLE
CREATE_TABLEGROUP
CREATE_PACKAGE
CREATE_SELECT
TRUNCATE
DROP
DROP_SCHEMA
DROP_INDEX
DROP_VIEW
DROP_TABLE
DROP_TABLEGROUP
DROP_SEQUENCE
RENAME
ALTER_TABLE_DROP_COLUMN
ALTER_TABLE_CHARACTER_COLLATE
ALTER_TABLE_AUTOINCREMENT
ALTER
ALTER_SCHEMA
ALTER_INDEX
ALTER_VIEW
ALTER_TABLE
ALTER_TABLEGROUP
ALTER_SEQUENCE
CREATE_FUNCTION
ALTER_FUNCTION
DROP_FUNCTION
CREATE_PROCEDURE
ALTER_PROCEDURE
DROP_PROCEDURE
MONGO_CREATE_INDEX
MONGO_DROP_INDEX
CREATE_DATABASE
ALTER_DATABASE
DROP_DATABASE
CREATE_USER
ALTER_USER
DROP_USER
CREATE_ROLE
DROP_ROLE
EXEC
CALL_PROCEDURE
CREATE_TRIGGER
ALTER_TRIGGER
DROP_TRIGGER
CREATE_EVENT
ALTER_EVENT
DROP_EVENT
ROLLBACK_DDL
CANCEL_DDL
VACUUM
SUBMIT_JOB
CANCEL_JOB
BUILD_TABLE
IF
DQL
SELECT
DESC
EXPLAIN
SHOW_INDEX
SHOW
CHECK_TABLE
SHOW_DDL
LIST
GDB_QUERY
CHECKSUM
SELECT_PG_TERMINATION_BACKEND
WLM_LIST_RULE
DCL
GRANT
DECLARE
SET
ANALYZE
FLUSH
OPTIMIZE
KILL
RECOVER_DDL
REMOVE_DDL
SELECT_PG_TERMINATION_BACKEND