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 为模板启用或禁用差分隐私,请执行以下操作:
打开 Clean Rooms 页面的 Created` 选项卡
在 Clean Room 磁贴上选择 Edit 或
» :ui:`Edit`(取决于 Clean Room 是否允许您进行分析)。
选择 Next,直到到达 Configure Analysis & Query。
在页面底部,展开 Privacy Settings。选择或取消选择 Differential Privacy 并提供该模板的设置,包括用户隐私预算和查询成本。您还可以设置阈值,以在此查询中强制执行最小组规模。
要配置其他模板的设置,请先为当前模板设置值,然后在模板选择器中选择不同的模板。
在 UI 中管理隐私预算¶
查看您的剩余隐私预算
当您运行查询或查看结果时,您可以在 Privacy Settings 部分中看到总预算和所用金额。
为其他用户设置隐私预算
在 UI 中,提供商可以设置隐私预算,但使用者不可以。
编辑 Clean Room 并转到 Configure Analysis & Query 页面。
选择一个模板。
在页面底部,展开 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_settings
或provider.add_consumers
。使用者 调用
consumer.set_privacy_settings
,为提供商运行的分析设置预算。
可用的隐私设置¶
可以使用各种隐私值设置程序来设置以下隐私值:
``differential``(整数)– 1 或 0,其中 1 表示应启用差分隐私,0 表示不应启用。
``epsilon``(浮点数):大于零的数字,表示应在结果中添加多少噪声。较小的值 (0.1-1.0) 可提供更强的隐私保护,但会为结果添加更多噪声。默认值:0.1。
``noise_mechanism``(字符串)– 用于向结果添加噪声的算法。指定
Laplace
或Gaussian
。``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>])
描述: 将校准后的噪声添加到数值中,以满足差分隐私保证。此函数只能在 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
$$);
设置聚合策略和最小组规模¶
如果您想要求对数据进行聚合并指定最小组规模,则可以在源表上设置 聚合策略,也可以在模板中强制执行聚合。
管理差分隐私费用¶
即使个人用户或模板没有启用差分隐私,差分隐私也会 产生成本,因为系统会检查每个查询,看看是否应该应用差分隐私。如果您向清除此成本,您可以为账户禁用差分隐私:
首先,使用 Web 应用程序为所有 Clean Room 关闭差分隐私:
登录 Web 应用程序。
在所有非故障 Clean Room(即使 Clean Room 未共享或未发布)中禁用差分隐私:
选择 Clean rooms » Created » Edit。
选择 Next,直到到达 Configure Analysis & Query。
在页面底部,展开 Privacy Settings。取消选择 Differential Privacy`(如果已选),然后点击 :ui:`Next 和 Finish 以保存更改。如果未选,只需点击 Cancel,然后进入下一个 Clean Room。
最后,通过在 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。