第一章 问题描述
在数据查询时,如果有用户信息泄露,登陆后可以通过sql查询系统表,甚至修改数据库系统表,这样会给系统维护带来极大风险,所以需要在服务端限制数据查询时查询系统表
第二章 使用步骤
1 修改配置文件
在WEB-INF\lib下找到unieap-report-datasource-manager-x.x.jar,jar包中有一个ReportDatasourceType.yaml配置文件,需要修改文件中不同种类数据库的system_catalogs项,在报表运行时,如果有符合数据库种类下的查询涉及到system_catalogs中的表,就会抛出异常,禁止查询。
这里以mysql数据库为例,system_catalogs中有information_schema, performance_schema, mysql, sys几个表名,如果查询时涉及到这几个表就会抛出异常。
- id: mysql
name: MySQL
kind: rdb
sort: 11
img: img/datasource/MySQL.jpg
property:
default_port: 3306
local: 0
use_catalog: true
system_catalogs: [information_schema, performance_schema, mysql, sys]
poolproperty:
maxPoolSize: 15
maxIdleTime: 7200
checkoutTimeout: 0
minPoolSize: 3
idleConnectionTestPeriod: 0
acquireIncrement: 3
maxStatements: 0
testConnectionOnCheckin: false
testConnectionOnCheckout: false
maxStatementsPerConnection: 0
disable: false
如下图所示,在数据集中解析和查询时均会报错。