安全协作查询语言(Secure Collaborative Query Language, SCQL)是一个允许多个互不信任参与方在不泄露各自隐私数据的条件下进行联合数据分析的系统。
架构
SCQL 系统同时支持 P2P 和中心化部署架构。它们看起来不同,但共享相同的 SCQL 统一架构。

- 图中的
Driver
组件可以是 P2P 部署架构中的Broker
,也可以是中心化部署架构中的SCDB
。 Interpreter
组件负责将 DQL 查询翻译成明密文混合执行图,它是 SCQL 的核心组件。通常作为 lib 嵌入到Driver
中SCQLEngine
是一个明密文混合执行引擎,它与参与方协作运行执行图并将查询结果报告给Driver
。
中心化模式------SCDB
概述

中心化模式下的 SCQL 系统由一个 SCDB 服务器和多个 SCQLEngines 组成:
- SCDB 服务器负责将 SQL 查询翻译成明密文混合执行图,并将执行图下发给参与方的 SCQLEngine。
- SCQLEngine 是一个明密文混合执行引擎,它与参与方协作运行执行图并将查询结果报告给 SCDB 服务器。SCQLEngine 是在secretflow的 MPC 框架 secretflow/spu 的基础上实现的。
工作流
流程图展示了如何使用SCQL系统,该系统包含准备和查询两个阶段。在准备阶段,设置系统,并创建和初始化必要的表。在查询阶段,提交、处理查询并返回结果。

参与者
- Alice:alice 方中的用户
- Bob:bob 方中的用户
- SCDB:SCDB 服务器
准备阶段
-
1.0 创建数据库
Alice 或 Bob 通过 CREATE DATABASE 语句使用 root 用户帐户创建一个新数据库,该数据库可以视为一个新项目,SCQL 支持同时运行多个项目。
-
2.0 创建和授予用户
Alice 通过 CREATE USER 语句使用 root 用户帐户在 SCDB 中创建用户帐户"Alice",并通过 GRANT 语句授予对相关数据库的访问权限
-
3.0 创建和授予用户
Bob 通过 CREATE USER 语句使用 root 用户帐户在 SCDB 中创建用户帐户"Bob",并通过 GRANT 语句授予对相关数据库的访问权限
-
4.0 创建表格
Alice 使用 CREATE TABLE 语句的帐户"Alice"在 SCDB 中创建表。
-
5.0 创建表格
Bob 使用 CREATE TABLE 语句的帐户"Bob"在 SCDB 中创建表。
-
6.0 授予 CCL
Alice 授予有关 Alice 使用帐户"Alice"在 SCDB 中为 Alice 和 Bob 创建的表的 CCL,有关详细信息,请参阅 SCQL CCL。
-
7.0 授予 CCL
Bob 使用帐户"Bob"向 Bob 授予有关 Bob 在 SCDB 中为 Alice 和 Bob 创建的表的 CCL,有关详细信息,请参阅 SCQL CCL。
执行阶段
-
8.0 提交 DQL
Alice 使用帐户"Alice"通过 public/submit_query 或 public/submit_and_get向 SCDB 提交 DQL。
-
9.0 流程查询
SCDB 将检查 ccl 并使用引擎执行查询。
-
10.0 返回结果
SCDB 将查询结果返回给 Alice。
P2P模式------Broker
概述

P2P 模式下的 SCQL 系统由 SCQLBrokers 和 SCQLEngines 组成,各方都有自己独立的 SCQLBroker 和 SCQLEngines:
- SCQLBroker:作为 P2P 的核心模块,主要包含三个功能: 用户交互:通过 http 接口接受请求并返回结果。 P2P 状态同步:完成不同 SCQLBroker 之间的状态同步。 SQL 分析及作业调度:将 SQL 查询转换为明密文混合的执行图,并调度到本地 SCQLEngine 执行。
- SCQLEngine:SCQLEngine 是一个明密文混合执行引擎,不同参与方的 SCQLEngine 可以协作完成执行图计算,本地的 SCQLEngine 会将结果报告给 SCQLBroker 。
工作流
在 P2P 模式中,不同的参与方通过 Unique Identifiers
来标识,不同业务则通过 Projects
进行隔离。
Unique Identifier
: 包括唯一的 partyCode 和公私钥对,私钥应由参与方自行保密,公钥则对所有参与方公开。Project
: 项目,类似于中心化模式中的虚拟数据库概念,用于隔离不同的业务。
整个流程可以分为五步:创建项目 、邀请参与方 、创建数据表 、配置 CCL 和 执行查询。
- 创建项目:一方可以创建项目并成为项目所有者。所有者只额外拥有邀请其他成员加入的权限。
- 邀请参与方:项目所有方邀请其他方后,其他方可以选择是否接受邀请。 如果接受,则可以加入项目,成为项目成员。
- 创建数据表:项目成员可以创建自己的数据表元数据,以便在项目中进行联合分析。
- 配置 CCL:成员创建自己的表后,可以将特定的 CCL 权限授予自己及其他参与方。
- 执行查询:完成 CCL 配置后,各方可以执行相应的 SQL 分析作业。
如何选择部署模式
这取决于实际的业务场景。如果没有可信第三方可以依赖,则使用 P2P 部署架构(P2P 场景目前来看相对更常见)。如果有可信第三方,则可以选择中心化部署架构。
P2P 和中心化部署架构支持相同的 DQL 语法和 MPC 协议,端到端性能也基本相同。