SQL查询/导出 ¶
在线查询 ¶
功能说明 ¶
在线查询模块适用于简单的SQL查询和日常问题排查,通过工作流控制查询权限的申请和审核,并强制对SQL语句进行改写以限制最大查询数量,同时记录所有的查询日志方便审计。查询功能可较好的支持大数据量的检索和导出操作
使用范围和限制 ¶
具体实现都在各个数据库对应的engines中
| 支持语法 | 权限控制 | 脱敏 | |
|---|---|---|---|
| MySQL | select、show、explain | 表级(依赖goInception) | √(精确列匹配,依赖Inception) |
| MsSQL | select、sp_helptext,限制部分关键字和+号 | 库级 | √(匹配所有列) |
| Redis | 限制部分查询命令,参考redis.py | 库级 | × |
| PgSQL | select | 库级 | × |
| Oracle | select、with、explain | 库级 | √(匹配所有列) |
| MongoDB | find | 库级 | × |
| Phoenix | select、explain | 库级 | × |
| ODPS | select | 库级 | × |
| ClickHouse | select、explain | 库级 | × |
MySQL查询的权限控制依赖goInception的语法树打印,数据脱敏依赖Inception的语法树打印,需要完善相关配置
备注 ¶
-
查询/导出数量最多支持50万行记录
-
查询语句大小最大支持10M
-
通过系统配置可设置最大支持行数。具体行数限制由用户申请时写入
-
查询功能支持多tab,可同时开启多个窗口进行查询
-
数据查询和数据下载是两个不同功能,不同申请流程。申请数据下载包含数据查询和数据下载
MySQL ¶
-
权限校验 依赖goInception解析查询语句,部分复杂语句可能会解析失败,相关issue:#861 #864
-
脱敏查询 依赖Inception解析查询的select字段信息,可通过相关issue查看不支持的场景: #145、#12
MongoDB ¶
-
mongodb的查询放弃redash查询重新支持原生的查询语法,目前【在线查询】时支持的方法为:查询计划按钮、db.col.find().explain()、db.col.getIndexes()、db.col.find().count()、db.col.aggregate()等,能基本满日常查询需求
-
mongodb查询结果返回美化,以表格的形式显示更直观,点每行首的+可以美化json的格式显示单行结果,同时支持查询结果字段排序
-
mongodb查询结果返回的字段是检测第一条和最后一条数据中所有的字段为基准,如果要精确显示所有字段,请在查询的时候投影相关字段
-
mongodb正则查询只支持$regex的方式查询:db.audioinfos.find({"fileName":{ $regex: "^C002"}})
依赖权限 ¶
| 权限CODE | 权限名称 | 权限说明 |
|---|---|---|
| menu_query | 菜单 SQL查询 | 一级菜单权限,必须配置 |
| menu_sqlquery | 菜单 在线查询 | 二级菜单权限,必须配置 |
| menu_queryapplylist | 菜单 权限管理 | 二级菜单权限,用于查询权限申请和管理,必须配置 |
| query_applypriv | 申请查询权限 | 可以申请数据查询权限 |
| query_mgtpriv | 管理查询权限 | 可以查看和管理资源组内的用户查询权限,支持修改结果集限制、有效时间以及删除权限 |
| query_review | 审核查询权限 | 可以查看和审核所在资源组的所有查询权限申请工单 |
| query_submit | 提交SQL查询 | 可以使用SQL在线查询,不配置时执行查询会提示无权限 |
| query_all_instances | 可查询所有实例 | 拥有所有实例所有数据的查询权限,无需再次申请 |
| query_resource_group_instance | 可查询所在资源组内的所有实例 | 拥有所在资源组实例所有数据的查询权限,无需再次申请 |
相关配置 ¶
参考:系统配置项
-
实例需要关联查询标签才能在查询功能中展示
-
QUERY_CHECK配置项
脱敏规则配置 ¶
| 规则类型 | 规则脱敏所用的正则表达式,表达式必须分组,隐藏的组会使用****代替 | 需要隐藏的组 | 规则描述 |
|---|---|---|---|
| 手机号 | (.{3})(.*)(.{4}) | 2 | 保留前三后四 |
| 证件号码 | (.*)(.{4})$ | 2 | 隐藏后四位 |
| 银行卡 | (.*)(.{4})$ | 2 | 隐藏后四位 |
| 邮箱 | (.)@(.) | 2 | 去除后缀 |
| 数值计算 | [{"operator": "/","operator_value": 100,"quantile_length": 2}] | 随意或不填 | 将字段值除以100,保留小数点后两位 |
| 字符串替换 | [ { "index": [0, 100], "new_replace_str": "xxx" }] | 随意或不填 | 在字段的索引0-100位置,替换成字符xxx |
权限管理 ¶
查询和导出权限管理和SQL上线一样使用工作流控制审批流程,管理员可以自主配置每个组的审批流程,用户提交申请、审批结束后才可以进行SQL查询。 同时管理员在权限管理页面还可以直接编辑、删除当前用户已拥有的查询权限