1.SCQL使用/集成最佳实践
目前SCQL只开放API供用户使用/集成
- 使用SCDBClient上手体验
- 可以基于SCQL API开发封装白屏产品,或集成到业务链路中
1.1 部署系统
- 环境配置:
- 机器配置:CPU/MEM最低8C16G
- 机构之间的网络互通
- 镜像:secretflow/scql
- SCDB
- 启动:/home/admin/bin/scdbserver -config=/path/to/config.yml
- SCQLEngine
- 启动:/home/admin/bin/scqlengine --flagfile=/path/to/gflags.conf
- 启动:/home/admin/bin/scqlengine --flagfile=/path/to/gflags.conf
1.2 项目设置
SCQL中的一些概念
- Project
- 多个参与方在协商一致后加入到同一个项目中进行多方安全数据分析
- 参与方身份认证
- 参与方执行query时需要进行身份认证
- 数据表管理
- 管理参与分析的数据表的schema信息
- 权限信息管理
- 表字段的权限信息,特别是CCL信息
用户在每次执行query的时候,均要提供上述信息,上手成本较高。
将其映射成如下关系:
- 表字段的权限信息,特别是CCL信息
1.2.1 创建用户(Create user)
- SCDB内置了一个权限受限的root用户,方便系统bootstrap
- root用户只能做CREATE database/user等操作
- root用户无法修改普通用户设置的CCL,无法发起查询(DQL)
- root用户滥用不会导致数据泄露
为什么创建用户是需要公钥和签名?
- 目的是防止伪造身份攻击
如何防止攻击
- 前提条件:每个参与方在部署SCQLEngine 节点时,需要生成(或提供)公私钥,并和合作方交换公钥,配置到引擎侧的 authorized profile 文件中;
- SCDB 在处理 create user 请求时,会校验签名,确保请求者有对应的私钥:
- SCDB 在处理请求者的 DQL 时,会把请求者和查询涉及参与方的公钥信息一起下发给 SCQLEngine。SCQLEngine会先校验自己和合作方的公钥,如果不匹配,就拒绝执行。
1.2.2 创建项目&用户授权
- 创建一个名为db_test的数据库(项目)
- root>CREATE DATABASE db_test;
- 目的:将参与合作方添加到项目中
- root>GRANT CREATE,GRANT OPTION,DROP ON db_test.* TO alice
- 创建表
- alice> CREATE TABLE db_test.ta(ID string,…,age int)REF_TABLE=alice.user_credit DB_TYPE=‘mysql’
设置CCL
1.3 联合分析
2. SCQL工作原理
SCQL对于同种查询内置了多种优化转换方式,
3. 使用SecretNote上手体验P2P的SCQL
3.1 安装部署
# 从官网下载scql
git clone https://github.com/secretflow/scql.git
# 进入scql/examples/p2p-tutorial/
cd scql/examples/p2p-tutorial/
# 生成公私钥,并交换alice和bob的公私钥
bash setup.sh
# 使用docker compose拉起双方(这里的tk-sn是指去一个前缀)
docker compose -p tk-sn up -d
# 查看状态
docker compose -p tk-sn ps
# 查看启动的日志
docker-compose -p tk-sn logs engine_alice
# 查看启动端口
cat .env
# 启动Secretnote
secretnote -mode=scql --party=alice --host=http://127.0.0.1:8081 --allow-root
# 开启一个新的终端
secretnote -mode=scql --party=bob --host=http://127.0.0.1:8082 --allow-root
3.2 使用secretNote
3.2.1 创建项目
3.2.2 邀请合作者
进入项目后可以点击右上角的➕进行邀请。
3.2.3 创建表
在alice下创建如图所示的表
bob端创建如图所示的表:
3.2.4 设置CCL
如下是使用命令的方式进行设置,我们采用可视化的方式进行相同的操作。
通过如下进入配置界面:
3.2.5 CSQL查询
新建jupyter,alice可以查看自己的数据,但不能查看别人的数据(因为方式不被允许)