SQLConsole作为SQL/命令执行的入口,在SQL执行的时候,可以通过设置一系列的安全规则校验,让只有满足规则校验的SQL,才能正常下发执行;新版的安全规则具备非常灵活的能力(DSL),能够让SQLConsole以最严格的形式(对想要限制执行的SQL进行限制)或者以最宽松的模式(基本上等同于终端模式,对一切SQL进行放行)

SQLConsole支持的数据库分为关系型数据库(NewSQL目前基本上都是按兼容关系型数据库来设计,因此也当成关系型数据库看待)和非关系型数据库(NoSQL),安全规则的定义和分类不同

SQLConsole for 关系型数据库

常用配置项说明

单次查询最大返回行数:定义查询结果行数最多返回多少行,用于替换原来配置管理里面的“单次查询SQL最大的行数”(对接新的安全规则后,配置管理里面的“单次查询SQL最大行数”配置项将废弃,无效)

单次查询包含敏感列条件的最大返回行数:用于替换原来配置管理里面的“单次查询包含敏感列条件的SQL最大的行数”(对接新的安全规则后,配置管理里面的“单次查询SQL最大行数”配置项将废弃,无效)

限制允许SQL全表扫描的最大值(MB):仅MYSQL和Oracle有效,查询SQL下发前检查执行计划,若扫描大小超过此配置值,则会拒绝SQL执行,提示用户优化查询SQL再执行

关闭执行变更SQL校验影响行数和提示:是否关闭在执行变更SQL的时候进行预校验影响行数并弹框确认,系统缺省行为是进行校验并弹框确认的

检测点说明

所有的安全规则(包括配置项和每个自定义的规则),都在SQL下发之前进行,为了更好归类自定义规则,做了如下检测点:

SQL执行数量规范:可在此检测点对单次提交的SQL个数进行约束

DQL规范:可在此检测点对DQL类型的SQL执行进行约束

DML规范:可在此检测点对DML类型的SQL执行进行约束

DDL规范:可在此检测点对DDL类型的SQL执行进行约束

DCL规范:可在此检测点对DCL类型的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执行性能规范等安全规则失效

逻辑库SQL执行规范:针对逻辑库查询预留的检测点,物理库查询不适用;

检测点作用流程示意图

mysql console mysql console啥意思_mysql添加映射模块

SQL大类和SQL子类

目前DMS企业版能够通过语法解析识别的SQL大类和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
- DROP
- DROP_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
SQLConsole for MongoDB

常用配置项说明

单次查询最大返回行数:定义查询结果行数最多返回多少行,用于替换原来配置管理里面的“单次查询SQL最大的行数”(对接新的安全规则后,配置管理里面的“单次查询SQL最大行数”配置项将废弃,无效)

检测点说明

所有的安全规则(包括配置项和每个自定义的规则),都在SQL下发之前进行,为了更好归类自定义规则,做了如下检测点:

用户执行权限:可在此检测点对SQL执行权限(提交者是否对应的库、集合权限)进行约束

集合规范:可在此检测点对【Mongo 集合命令】执行进行约束

DB命令规范:可在此检测点对【Mongo DB命令】进行约束

查询缓存命令规范:可在此检测点对【Mongo 查询缓存命令】进行约束

用户管理命令规范:可在此检测点对【Mongo 查询缓存命令】进行约束

角色管理命令规范:可在此检测点对【Mongo 角色管理命令】进行约束

复制集命令规范:可在此检测点对【Mongo 复制集命令】进行约束

分片命令规范:可在此检测点对【Mongo 分片命令】进行约束

检测点作用流程示意图

mysql console mysql console啥意思_mysql添加映射模块_02

命令分类和枚举

目前DMS企业版能够通过语法解析识别的SQL大类和SQL子类说明如下:

命令分类

具体类型枚举

集合命令

查询命令列表

- aggregate,find,findOne,count,distinct,getIndexes,getShardDistribution,isCapped,stats,dataSize,storageSize,totalIndexSize,totalSize

数据更新命令列表

- insert,save,findAndModify,remove,update

集合修改命令列表

- drop,renameCollection

索引修改命令列表

- createIndex,createIndexes,dropIndexes,reIndex

其他命令

- validate

DB命令

数据库查询命令

- commandHelp,currentOp,getCollectionInfos,getCollectionNames,getLastError,getLastErrorObj,getLogComponents,getPrevError,getProfilingStatus,getReplicationInfo,getSiblingDB,help,isMaster,listCommands,printCollectionStats,printReplicationInfo,version,serverBuildInfo,serverStatus,stats

创建集合命令

- createCollection

高危命令

- dropDatabase,fsyncLock,fsyncUnlock,killOp,repairDatabase,resetError,runCommand

查询缓存命令

读命令

- getPlanCache,getPlansByQuery,listQueryShapes

写命令

- clearPlansByQuery

用户管理命令

用户查询命令

- getUser,getUsers

用户修改命令

- createUser,changeUserPassword,dropUser,dropAllUsers,grantRolesToUser,revokeRolesFromUser,updateUser

角色管理命令

角色查询命令

- getRole,getRoles

角色修改命令

- createRole,dropRole,dropAllRoles,grantPrivilegesToRole,revokePrivilegesFromRole,revokeRolesFromRole,updateRole

复制集命令

- help,printReplicationInfo,status,conf

分片命令

- getBalancerState,isBalancerRunning

SQLConsole for Redis

检测点说明

所有的安全规则(包括配置项和每个自定义的规则),都在命令下发之前进行,为了更好归类自定义规则,做了如下检测点:

用户执行权限:可在此检测点对SQL执行权限(提交者是否对应的库、集合权限)进行约束

keys命令规范:可在此检测点对【key命令】执行进行约束

string命令规范:可在此检测点对【string命令】进行约束

list命令规范:可在此检测点对【list命令】进行约束

set命令规范:可在此检测点对【set命令】进行约束

sortedset命令规范:可在此检测点对【sortedset命令】进行约束

hash命令规范:可在此检测点对【hash命令】进行约束

其他命令规范:可在此检测点对【其他命令】进行约束

检测点作用流程示意图

mysql console mysql console啥意思_mysql console_03

命令分类和枚举

目前DMS企业版能够通过语法解析识别的SQL大类和SQL子类说明如下:

命令分类

具体类型枚举

kes命令

keys读命令
- EXISTS,TTL,PTTL,RANDOMKEY,TYPE,SCAN,OBJECTS
keys写命令
- DEL,DUMP,EXPIRE,EXPIREART,MOVE,PERSIST,PEXPIRE,PEXPIREAT,RENAME,RENAMENX,RESTORE,SORT,TOUCH,UNLIMK,WAIT,MIGRATE
string命令
string读命令
- GET,GETRANGE,BITCOUNT,GETBIT,MGET,STRLEN,BITOPS
string写命令
- APPEND,BITFIELD,BITOP,DECR,DECRBY,GETSET,INCR,INCRBY,INCRBYFLOAT,MSET,MSETNX,PSETEX,SET,SETNX
list命令
list读命令
- LINDEX,LLEN,LRANGE
list写命令
- BLPOP,BRPOP,BRPOPLPUSH,LINSERT,LPOP,LPUSH,LPUSHX,LREM,LSET,LTRIM,RTOP,RPOPLPUSH,RPUSH,RPUSHX
set命令
set读命令
- SCARD,SISMEMBER,SRANDMEMBER,SSCAN
set写命令
- SADD,SMOVE,SPOP,SREM
sortedset命令
sortedset读命令
- ZCARD,ZCOUNT,ZLEXCOUNT,ZRANGE,ZRANGEBYLEX,ZRANGEBYSCORE,ZRANK,ZREVRNGE,ZREVRANGEBYLEX,ZREVRANGEBYSCORE,ZREVRANK,ZSCAN,ZSCORE
sortedset写命令
- ZADD,ZINCRBY,ZINTERSTORE,ZPOPMAX,ZPOPMIN,ZREM,ZUNIONSTORE,BZPOPMIN,BZPOPMAX
hash命令
hash读命令
- HEXISTS,HGET,HLEN,HMGET,HSCAN,HSTRLEN
hash写命令
- HDEL,HINCRBY,HINCRBYFLOAT,HMESET,HSET,HSETNX

其他命令

待补充

数据变更-安全规则配置

数据变更作为变更SQL执行的入口,在工单提交、审批时,可以通过设置一系列的安全规则校验,让只有满足规则校验的SQL,才能正常提交工单;同时可以自定义风险级别,让不同风险的变更,走不同的审批流程;

新版的安全规则具备非常灵活的能力(DSL),能够让【数据变更】以最严格的形式(对想要限制执行的SQL进行限制)或者以最宽松的模式(基本上等同于终端模式,对一切SQL进行放行)

常用配置项说明

风险等级列表

不同的变更类型和场景,可以设置不同的风险等级,走不同的审批流程;

目前系统默认四种风险:低风险、中风险、高风险、重大风险;

这里的风险等级主要是在后面的【风险识别】和【风险审批】两个检查点中使用

检测点说明

所有的安全规则(包括配置项和每个自定义的规则),都在最终执行前进行,为了更好归类自定义规则,做了如下检测点

SQL提交规则

SQL提交规则,主要是为了限制SQL类型的提交,比如只允许提交DML语句,具体的SQL类型可以参考SQLConsole中关于SQL类型的说明;

风险识别规则

当【SQL提交规则】检查通过后,用户就可以提交审批了,在提交审批前,会执行风险识别规则,主要是为了识别本次工单的风险,可以根据数据库环境、SQL影响行数、SQL类型等条件,自定义风险等级;

比如提交线上DML语句,设置为中风险;删除线上字段,设置为高风险;

风险审批规则

当【风险识别规则】执行后,就可以执行【风险审批规则】了,风险审批规则可以根据不同的风险级别,定义不同的审批流。

这里需要注意的是,如果本次变更,同时触发了不同级别的风险,则系统会默认使用最高级别风险对应的审批流;

检测点作用流程示意图

mysql console mysql console啥意思_配置项_04