跳转至

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 库级 ×

MySQL查询的权限控制依赖goInception的语法树打印,数据脱敏依赖Inception的语法树打印,需要完善相关配置

常见问题

  • 管理员查询正常,普通用户查询提示错误(goInception配置等) 管理员查询不会做权限校验,所以不会使用到goInception解析
  • MySQL 查询不支持 limit offset #739
  • 管理员如何突破默认5000的查询限制 #875
  • 普通用户如何加大查询数量限制 -w1282

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 可查询所在资源组内的所有实例 拥有所在资源组实例所有数据的查询权限,无需再次申请

相关配置

参考:系统配置项

  1. 实例需要关联查询标签才能在查询功能中展示
  2. QUERY_CHECK配置项
  3. 在其他配置管理-全部后台数据中配置脱敏字段和规则

脱敏规则配置

规则类型 规则脱敏所用的正则表达式,表达式必须分组,隐藏的组会使用****代替 需要隐藏的组 规则描述
手机号 (.{3})(.*)(.{4}) 2 保留前三后四
证件号码 (.*)(.{4})$ 2 隐藏后四位
银行卡 (.*)(.{4})$ 2 隐藏后四位
邮箱 (.*)@(.*) 2 去除后缀

权限管理

查询权限管理和SQL上线一样使用工作流控制审批流程,管理员可以自主配置每个组的审批流程,用户提交申请、审批结束后才可以进行SQL查询
同时管理员在权限管理页面还可以直接编辑、删除当前用户已拥有的查询权限

数据字典

Back to top