上篇
如何使⽤ SCQL?
SCQL 开放 API 供⽤户使⽤/集成
• 使⽤ SCDBClient 上⼿体验
• 基于 SCQL API 开发封装⽩屏产品,或集成到业务链路中
使⽤流程
部署系统 》 项目设置 》 联合分析
SCQL 部署
环境准备:
• 机器配置:CPU/MEM 最低 8C16G
• 机构之间的⽹络互通
镜像:
https://registry.hub.docker.com/r/secretflow/scql
SCDB:
• 启动:/home/admin/bin/scdbserver -config=/path/to/config.yml
SCQLEngine
• 启动:/home/admin/bin/scqlengine --flagfile=/path/to/gflags.conf
SCQL 使⽤示例
假设场景:⾦融机构 Alice 想联合电商平台 Bob 做联合⽤户画像分析
Alice 希望统计不同信⽤等级,年龄在 20 岁到 30 岁之间且为电商平台 Bob 的活跃⽤户的⼈数,以及平均收⼊和平均交易额
SCDB
SCQL 概念
• Project: 多个参与⽅在协商⼀致后加⼊到同⼀个项⽬中进⾏多⽅安全数据分析
• 参与⽅身份认证:参与⽅执⾏ query 时需要进⾏身份认证
• 数据表管理:管理参与分析的数据表的 schema 信息
• 权限信息管理:表字段的权限信息,特别是 CCL 信息
⽤户在每次执⾏ query 的时候,均需要提供上述信息,上⼿成本较⾼
创建⽤户
SCDB 内置了⼀个权限受限的 root ⽤户,⽅便系统 bootstrap
• root ⽤户只能做 CREATE database/user 等操作
• root ⽤户⽆法修改普通⽤户设置的 CCL,⽆法发起查询(DQL)
• root ⽤户滥⽤不会导致数据泄露
防⽌伪造身份攻击
创建项⽬ & ⽤户授权
• 创建⼀个名为 db_test 的数据库(项⽬)
CREATE DATABASE db_test;
• ⽬的:将参与合作⽅添加到项⽬中
root> GRANT CREATE, GRANT OPTION, DROP ON dbtest.* TO alice
创建表
• ⽬的:参与⽅导⼊联合分析的数据表
设置 CCL
发起联合分析查询
DQL
SCQL Architecture & Workflow
SCQL x SPU
SCQL use SPU as a lib
• PPHLo C++ API 接⼊
• ColocatedIO 模式
示例:Aggregation w/ group by
以中心化模式的 SCQL 为例,讲解了 SCQL 的集成/ 使用的最佳实践
SecretNote,以UI界面的方式,上手体验P2P模式的SCQL
下篇
使⽤流程
部署系统 》 项目设置 》 联合分析
安装部署
1.部署 SCQL p2p 节点
• 单机 p2p 部署模式:https://www.secretflow.org.cn/zh-CN/docs/scql/0.5.0b2/intro/p2p-tutorial
• 多节点 p2p 部署模式:https://www.secretflow.org.cn/zh-CN/docs/scql/0.5.0b2/topics/deployment/how-to-deploy-p2p-cluster
2.部署启动 SecretNote
scql初始化
# openssl 1.1.0版本以上
git clone https://github.com/secretflow/scql
cd scql/examples/p2p-tutorial
bash setup.sh
拉起scql docker服务
docker-compose -p tf-sn up -d
安装启动secretnote-scql
pip install -U secretnote
secretnot --mode=scql --port 10000 --party=alice --host=http://10.8.3.155:8081 --allow-root
secretnot --mode=scql --port 10001 --party=bob --host=http://10.8.3.155:8082 --allow-root
邀请bob加入demo项目
SCQL使用示例
创建表
设置CCL
验证CCL
业务场景结果
番外
更新docker版本
curl -fsSL https://get.docker.com/ | sh
修改docker源(国内加速器)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"]
}
重启docker
systemctl restart docker