数据开放实验室平台介绍
实验室简介
禧云数据开放平台(数据开放实验室),是一套安全、高效、自助式的数据开放平台,实验室在不暴露隐私数据的前提下,通过多种安全机制实现数据授权,为使用人员提供SQL交互式查询分析、数据定制下载能力,对分析结果提供自助式报表配置功能。
实验室项目分为两个平台:
- 一个是供数据分析人员使用的(数据开放实验室),可以进行SQL交互式查询分析、数据定制;
- 另一个是供实验室管理人员使用的(实验室管控端),可以对数据进行授权,然后开放给数据分析人员使用。
数据开放实验室
1.数据列表
数据分析人员登录成功后,可以查看给自己授权的数据列表的相关元数据信息:
2.查询分析
数据分析人员可以通过数状展示的数据列表查看表、表字段信息,还可以手写SQL
语句,支持语法高亮,语法报错检查:
用到的技术
前端
- el-tree:树状展示表、字段数据;
- vue-codemirror-lite :
SQL
交互式查询; - websocket-heartbeat-js:实时显示查询日志、显示查询结果。
服务端
- WebSocketListener WebSocket 服务端;
SQL
语句规则校验;- 是否选择库;
- 表是否授权过;
- 字段是否授权过;
- 不能有
delete、update、truncate
等关键字; - 检查是否使用
limit
,是否在限定的范围之内。
- 使用多线程启动查询任务;
- 实时向客户端发送查询结果。
3.发布API
当SQL
语句有查询结果时,可以发布API
:
支持一次发送、周期性发送邮件:
服务端主要处理逻辑:
- 创建hive表;
- 向新建的hive表导入数据;
- 创建mysql表;
- 将hive表的数据导入到mysql表,实现数据加速。
4.API列表
4.1 数据定制
API保存成功后,可以在API列表里查看创建成功的API数据。为避免数据量过大影响网络,我们对数据做了批次限制:
点击【确定】按钮,可以对数据进行定制。定制成功后,邮件通知:
服务端主要处理逻辑:
- 使用线程池异步下载数据;
- 根据
API
从 对应的mysql
表读取数据,写入CSV
文件:- 数据小于指定阈值,则一次性写入
CSV
文件; - 数据大于指定阈值,则分批次写入
CSV
文件。
- 数据小于指定阈值,则一次性写入
- 将文件上传至
HDFS
指定路径; - 获取
API
收件人的邮箱地址,给收件人发送邮箱,提示收件人数据定制完毕。4.2 数据下载
数据定制完毕,可以对数据进行下载:
服务端主要处理逻辑:
- 判断
HDFS
上是否有该文件; - 将文件从
HDFS
上下载到部署实验室服务所在的服务器上:- 如果服务器上存在该文件,则先删除再下载;
- 循环数据,将指定的字节写入输出流,返回给浏览器下载。
三. 数据开放实验室管理后台功能
管理后台供实验室管理人员使用,主要提供账号开通、数据授权功能。
仓库管理
管理员可以查看当前仓库列表、新增仓库,同步元数据:
服务端处理逻辑:
- 获取数据仓库的
mysql
元数据库表,将元数据同步至实验室平台的mysql
库。
仓库表管理
服务端处理逻辑:
- 可以对单个表进行重新初始化。
账号开通
打开企业列表,点击【新增企业】,可以开通账号。在弹窗里录入企业信息:
数据授权
从企业列表里找到要操作的账号,在操作栏里点击【授权数据表】按钮:
在该界面可以看到该账号已经授权的数据表和未授权的数据表:
该界面会列出该表的所有字段,勾选将要授权的字段,设置授权规则:
对该字段设置原样复制:
对该字段设置脱敏规则,取值范围限制:
对字段设置完授权规则后,点击保存:
服务端保存成功后,数据分析人员登录【数据开放实验室】就可以看到刚刚授权成功的数据表了:
点击初始化数据按钮:
- 调用
Spark SQL
的ThriftServer
服务,为指定的表导入数据;
服务端主要处理逻辑: - 保存该企业与当前数据表、字段设置规则相关数据;
- 使用线程池,来创建表对应的
hive
表;
重要功能点:
- 可以为该企业授权多个数据表;
- 可以区分该企业已经授权的表和尚未授权的表;
- 可以将要授权的某个表的字段进行授权;
- 可以对将要授权的字段进行规则设置,比如是原样复制,还是脱敏设置、取值范围设置。
四、遇见的难点及解决办法
1. 数据授权
- 由于每个企业可以定制多个数据表,那么就存在多个企业都需要定制同一个数据表的可能,由于每个企业对数据表的需求可能不一致,所以设置规则就有可能不一样,那么怎么去设计企业定制的数据表呢?
解决办法:为每个企业授权一个表的同时,后台其实会做一个拷贝的动作,创建出来一个与源表结构一致的新表。
2. 授权字段规则设置
处于数据安全的角度考虑,有些表的字段可能需要进行脱敏处理、数据可能需要取值范围限制。
解决办法:
- 建一个字段表,存放该字段的授权规则。分别有 加密方法、加密参数、过滤方法、过滤参数(
json
字符串)等字段; - 如果该字段选择原样复制,不加任何规则限制,则对应的加密方法、加密参数、过滤方法、过滤参数都插入空值。
3. 数据分析人员数据查询校验
实验室管理员在给数据分析人员授权数据表、字段之后,怎么去保证数据分析人员在自己的权限范围内查询数据呢?
解决办法:
- 对用户提交的
SQL
语句进行规则校验;SQL
语句不能为空;- 去掉该
SQL
语句最后的分号; - 判断
SQL
语句内部是否包含分号,如果包含分号,则不允许查询; - 不能有
delete、update、truncate、insert、alert、create、drop、rename
等关键字; - 是否选择了数据库;
- 表是否授过权;
- 字段是否授过权;
- 是否有必备的关键词比如:
select、 from
; - 是否使用了
limit
; limit
是否在限制的范围之内。