Snowflake Data Clean Room 中的差分隐私

为了帮助保护数据中实体的隐私,Snowflake Data Clean Room 提供 差分隐私。差分隐私是基于数学的隐私系统 [1],为数据集的单个查询和重复查询提供实体级别的数据保护。数据提供商可以在其 Clean Room 配置差分隐私,从而为其数据提供强大的实体级隐私保护和低噪声水平。

差分隐私是简单聚合要求的替代方案,如果攻击者针对有一个实体差异的数据生成足够多的“接近”查询(称为 差分攻击),则可能会暴露隐私信息。

差分隐私也是数据掩码的一个很好的替代方案,它完全隐藏列值,代价是阻止对掩码行进行联接操作,并向分析师隐藏有用的数据。差分隐私允许对受保护的列进行联接操作,并且允许分析师查看受保护的数据,方法是添加足够的噪声来保护受保护行的隐私,但不要添加太多噪声,以免分析师无法使用数据。

重要

客户负责在 Snowflake Data Clean Room 中配置差分隐私工具,以满足其数据隐私要求。默认情况下,这些工具未配置。

差分隐私在 Clean Room 中的工作原理

Clean Room 提供自己的差分隐私实现,这与 Snowflake 差分隐私 不同,因此请阅读本文档以了解不同的行为和设置。

差分隐私会保护数据中 实体 的隐私。Clean Room 将实体定义为列中的唯一值。Clean Room 确定哪些列包含可能敏感的数据;例如,社会保险号或电子邮件地址可能是敏感实体,但颜色不是。应用差分隐私时,Clean Room 可能会识别每个表中的一个或多个实体列。您无法配置哪些列被指定为实体列。

Clean Room 中的差分隐私还会对每个实体关联的数值结果添加噪声。

用户可能会尝试比较多个不同的查询结果以减少噪声;这称为 差分攻击。为了缓解差分攻击,差分隐私会计算和监控为账户分配的 隐私预算。每个查询都有一个成本,反映该查询暴露了多少实体隐私。此成本通过数学计算得出,并取决于查询、数据和该用户的先前查询。如果查询成本超过剩余的隐私预算限额,则查询将失败。否则,查询可以继续,成本将计入用户的每日隐私预算。隐私预算每天更新。

Clean Room 中的差分隐私不会对查询强制执行聚合约束,但您可以单独为数据或模板 添加聚合约束

小技巧

Snowflake 隐私策略 禁止从受保护的表中创建视图,因此您无法链接具有隐私策略的表。

在 UI 中启用和管理差分隐私

在 Clean Room UI 中,提供商可以在模板级别设置隐私设置;使用者无法启用或修改差分隐私设置。Clean Room UI 中使用的标准 Snowflake 模板可以为每个模板提供不同的隐私设置。

要使用 Clean Room UI 为模板启用或禁用差分隐私,请执行以下操作:

  1. 打开 Clean Rooms 页面的 Created` 选项卡

  2. 在 Clean Room 磁贴上选择 Edit三个垂直点表示更多选项 » :ui:`Edit`(取决于 Clean Room 是否允许您进行分析)。

  3. 选择 Next,直到到达 Configure Analysis & Query

  4. 在页面底部,展开 Privacy Settings。选择或取消选择 Differential Privacy 并提供该模板的设置,包括用户隐私预算和查询成本。您还可以设置阈值,以在此查询中强制执行最小组规模。

  5. 要配置其他模板的设置,请先为当前模板设置值,然后在模板选择器中选择不同的模板。

在 UI 中管理隐私预算

查看您的剩余隐私预算

当您运行查询或查看结果时,您可以在 Privacy Settings 部分中看到总预算和所用金额。

为其他用户设置隐私预算

在 UI 中,提供商可以设置隐私预算,但使用者不可以。

  1. 编辑 Clean Room 并转到 Configure Analysis & Query 页面。

  2. 选择一个模板。

  3. 在页面底部,展开 Privacy Settings,在其中您可以查看用户隐私预算和查询成本。

在 API 中启用和管理差分隐私

在 Clean Room API 中,任何一方都可以在协作者级别启用和配置差分隐私。

所有自定义模板在 Clean Room 中使用相同的差分隐私设置。Snowflake 提供的模板可以在 UI 中使用个人隐私设置进行配置。

使用以下程序配置差分隐私:

  • consumer.enable_templates_for_provider_run – 为提供商运行的所有分析禁用或启用差分隐私,并使用默认值设置。

  • consumer.set_privacy_settings – 在提供商运行的涉及自定义模板的分析中指定单独的差分隐私设置。

  • provider.set_privacy_settings – 在使用者运行的涉及自定义模板的分析中指定单独的差分隐私设置。

  • provider.add_custom_sql_template – 提供 灵敏度 参数,以增加或减少模板的 epsilon(噪声水平),使其高于或低于为使用者设置的基准 epsilon。

  • provider.add_consumers – 为每位使用者指定隐私设置。您可以使用不同的隐私设置多次添加同一客户,以更改他们的隐私设置。

  • provider.suspend_account_dp_task – 为此账户中所有 Clean Room 禁用差分隐私预算监控。差分隐私不再强制执行。

  • provider.resume_account_dp_task – 为此账户中所有 Clean Room 启用差分隐私预算监控。任何差分隐私设置都将得到尊重。

Clean Room 的隐私设置存储在 SAMOOHA_CLEANROOM_cleanroom_ID.admin.privacy_budget 中,其中 APPLICATION_ID 是模板名称(NULL 代表所有自定义模板),PARTY_ACCOUNT 是应用该名称的用户。

在 API 中管理隐私预算

查看您的剩余隐私预算

使用者可以调用 consumer.view_remaining_privacy_budget 程序。提供商无法在代码中查看其剩余的隐私预算。

为其他用户设置隐私预算

  • 提供商 调用 provider.set_privacy_settingsprovider.add_consumers

  • 使用者 调用 consumer.set_privacy_settings,为提供商运行的分析设置预算。

可用的隐私设置

可以使用各种隐私值设置程序来设置以下隐私值:

  • ``differential``(整数)– 1 或 0,其中 1 表示应启用差分隐私,0 表示不应启用。

  • ``epsilon``(浮点数):大于零的数字,表示应在结果中添加多少噪声。较小的值 (0.1-1.0) 可提供更强的隐私保护,但会为结果添加更多噪声。默认值:0.1。

  • ``noise_mechanism``(字符串)– 用于向结果添加噪声的算法。指定 LaplaceGaussian

  • ``privacy_budget``(整数)– 为该用户提供的隐私预算额,数字 >= 0,其中 0 表示启用差分隐私后他们无法运行查询。默认值为 10。

  • threshold``(*整数*)– 指定 1 以在 Snowflake 提供的模板中强制执行 ``threshold_value,或指定 0 以忽略 threshold_value。默认值为 0。此值由 Clean Room UI 中的差分隐私开关管理。

  • ``threshold_value``(整数)– 一个组要在数据中显示应具有的最小行数。仅在 Snowflake 提供的特定模板中使用。

其他隐私功能

为结果添加噪声

如果您想在不实施差分隐私的情况下手动为结果添加噪声,则可以在模板或自定义代码中使用以下 Clean Room 功能。请注意,此代码要求用户有足够的隐私预算,否则它将失败;如果禁用差分隐私任务,则用户的预算实际上是无限的。

cleanroom.addnoise(<val>, <epsilon>, <noiserand>, [<gaussian>], [<delta>])
Copy

描述: 将校准后的噪声添加到数值中,以满足差分隐私保证。此函数只能在 Clean Room 的上下文中调用。此函数不需要为用户或模板启用差分隐私,也不需要启用差分隐私任务。在模板或 UDP/UDTP 中使用此函数。

实参:

  • val (DOUBLE) – 将添加噪声的原始值。

  • epsilon (DOUBLE) – 隐私预算参数,其中较小的值 (0.1-1.0) 可提供更强的隐私保护,但会添加更多噪声。值大于 0。

  • noiserand (DOUBLE) – 介于 0 和 1 之间的随机值,可增加每个结果的随机性。使用随机值生成器即时计算此值,而不是传入静态值。

  • gaussian (BOOLEAN,可选) – 为 TRUE 时,使用 Gaussian 噪声而不是 Laplacian 噪声。默认值为 FALSE。

  • delta (DOUBLE,可选)gaussian 为 TRUE 时,Gaussian 机制的 delta 参数(越小越好)。默认值为 0.000001。

返回: 一个 DOUBLE 值,表示已添加隐私保护噪声的原始值。

建议:

  • 仅适用于汇总 (COUNT,SUM,AVG),不适用于单个记录。

  • 考虑对结果进行四舍五入,以避免显示过多的精度。

  • 此功能需要隐私预算才能运行,因此请注意,如果用户预算不足,它将失败。

  • 结合使用最小组规模限制以增强保护。

示例:

此示例模板使用 Clean Room 范围的 epsilon 值,为不同的哈希电子邮件值计数添加噪声。

CALL samooha_by_snowflake_local_db.provider.add_custom_sql_template(
$cleanroom_name,
$template_name,
$$
SELECT
  cleanroom.addNoise(
    count(distinct p.hashed_email),  -- Value
    {{ privacy.epsilon | sqlsafe }}, -- Epsilon
    UNIFORM(0::FLOAT, 1::FLOAT, RANDOM()) -- Noiserand
    ) AS noisy_count
FROM
    IDENTIFIER({{ source_table[0] }}) p
$$);
Copy

设置聚合策略和最小组规模

如果您想要求对数据进行聚合并指定最小组规模,则可以在源表上设置 聚合策略,也可以在模板中强制执行聚合。

管理差分隐私费用

即使个人用户或模板没有启用差分隐私,差分隐私也会 产生成本,因为系统会检查每个查询,看看是否应该应用差分隐私。如果您向清除此成本,您可以为账户禁用差分隐私:

  1. 首先,使用 Web 应用程序为所有 Clean Room 关闭差分隐私:

    1. 登录 Web 应用程序。

    2. 在所有非故障 Clean Room(即使 Clean Room 未共享或未发布)中禁用差分隐私:

      1. 选择 Clean rooms » Created » Edit

      2. 选择 Next,直到到达 Configure Analysis & Query

      3. 在页面底部,展开 Privacy Settings。取消选择 Differential Privacy`(如果已选),然后点击 :ui:`NextFinish 以保存更改。如果未选,只需点击 Cancel,然后进入下一个 Clean Room。

  2. 最后,通过在 Snowsight 中调用 provider.suspend_account_dp_task procedure,暂停账户中的差分隐私后台任务。

重要

禁用后台任务后,在 Clean Room 中启用差分隐私会自动为该账户重新启用任务。

一些注意事项和故障排除:

  • 如果您忘记为 Clean Room 禁用差分隐私并暂停后台任务,对于已安装 Clean Room 的用户,差分隐私可能无法在该 Clean Room 中运行。

  • 如果在安装 Clean Room 之前在 Clean Room 内启用了差分隐私,则 Clean Room 的安装会失败。在这种情况下,您必须禁用 Clean Room 中的差分隐私,或重新启用以下概述的任务。

如果您以后想在账户中启用差分隐私, 可以为账户中的任何 Clean Room 启用差分隐私,也可以在 Snowsight 中调用 provider.resume_account_dp_task procedure

语言: 中文