數據管理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