实施差分隐私¶
本主题包含为其账户实现差分隐私的数据提供商的信息。
为数据集实施差分隐私时,任务涉及三个关键概念:
限制
您无法为同一个表或视图同时分配隐私策略、聚合策略或掩码策略。
除了查询 噪声间隔 外,分析师不知道他们是否在查询受隐私保护的表,因此数据提供商应该告知他们查询结果包含噪声。
数据提供商无法监控分析师在另一个账户中运行查询所产生的隐私损失。
目前不支持对单个表应用多个隐私策略。因此,无法在单个表中通过实体级差分隐私保护多个实体。
目前禁止查询应用了与实体键相关联的隐私策略的复制表或克隆表。
关于实体级隐私¶
实体 是指一类应受保护的数据主体,例如人、组织或地点。如果每个单个实体只出现在一行中,行级隐私就足以保护其身份。但是,如果属于单个实体的数据出现在多行中(例如,在事务性数据中),为了妥善保护每个实体,必须在实体级隐私中配置差分隐私。
为了实现实体级隐私,Snowflake 支持您指定可用于识别实体的属性(实体键)。这让 Snowflake 能够识别数据集中属于特定实体的所有记录。例如,如果实体键被定义为列 email
,则 Snowflake 可以确定 email=joe.smith@example.com
属于同一实体的所有记录。
大多数情况下,相较于行级隐私,实体级隐私更受青睐,但如果表符合以下情况,行级隐私可能更适合:
表中没有任何列能够唯一识别实体。实体级隐私需要识别列。
每个单个实体只出现一次。
该表不会用于联接操作。虽然可以对受行级隐私保护的表进行联接操作,但会存在一些 限制。
在为表或视图分配隐私策略时,可以选择实施实体级隐私还是行级隐私。有关更多信息,请参阅 分配隐私策略。如果选择实现实体级隐私,数据还必须满足 结构要求,以确保正确使用实体标识符。
小技巧
如果想要使用相同的隐私策略来保护两个独立的表,但其实体键值不同,可以创建一个新表来映射这两个标识列,然后创建一个联接这两个表的视图,并将隐私策略应用于该视图。例如,如果一个表中的实体键是 email
,而另一个表中的实体键是 user_id
,但两者都指向相同的实体,则可以使用此策略。
实体级隐私的结构要求¶
受实体级差分隐私保护的数据结构必须符合一定要求。只有满足这些要求,Snowflake 才能准确跟踪与实体相关的隐私损失。
在应用隐私策略实现差分隐私 之前,您应该构建您的数据以满足这些要求。Snowflake 无法确定数据是否符合这些结构要求,因为它们关乎数据的含义,而非差分隐私的实现。例如,如果两个不同表的实体键都设置为列 user_id
,但其中一列包含数字标识符的值,而另一列包含电子邮件地址,则 Snowflake 无法正确将两个表中的实体信息进行关联。
为了实现实体级隐私,您的数据必须符合以下要求:
每一行仅代表实体中的单个个体 – 例如,表中包含用户和家庭数据。如果需要保护的实体是用户,则表的结构不能是每行代表一个家庭,而该家庭中的所有用户都放在其他列中。您需要调整表的结构,确保每个用户只有一行,并设置一个
household_id
列来指示用户属于哪个家庭。所有表的实体标识符一致 – 您可以创建表示单个实体所需保护的隐私策略,然后将该策略应用于包含有关该实体信息的多个表。将隐私策略分配给各表时,需要指定唯一标识实体的列(即实体键)。在这些实体键列中,唯一标识实体的值必须相同。例如,假设在两个包含实体信息的表中,
email
列是实体键。如果一个表中某个实体的电子邮件地址是joe@company.com
,那么另一个表中的电子邮件地址也必须是joe@company.com
。所有表中的实体标识符 – 尽管实现实体级隐私不是必需的,但您可以在所有与实体相关的表中包含实体标识符,从而使分析师在查询联接时能够最大限度地减少噪声。某些情况下,您可能需要对实体键列进行反规范化处理来满足此要求。例如,假设您有以下各表,其中实体是客户:
表
描述
customer
客户目录,其中每行都是一个客户,并且有
customer_id
。transactions
客户事务,其中每行都是一个事务,并且有
transaction_id
。每个客户可以有多个事务。transaction_lines
在事务中购买的唯一项目。 单个事务中可以有多个行。
根据规范化方面的最佳实践,
transaction_lines
表应该有``transaction_id``,但没有customer_id
。transaction_lines
表将与transactions
表相关联,然后通过customer_id
关联到customers
表。但是,对于差分隐私,您可能希望通过将
customer_id
标识符添加到transaction_lines
表中来为分析师优化数据。这样分析师在将transaction_lines
表与另一个表联接时,可以通过在联接键中包含customer_id
来将噪声降至最低。
与 Snowflake 功能的交互¶
本节探讨了以下差分隐私对象如何与其他 Snowflake 功能交互。同时,本节讨论了对隐私策略、隐私预算和隐私域的影响。
数据共享¶
当将应用了隐私策略的安全视图和表添加到共享中时,它们会受到差分隐私的保护。如果通过共享对不安全视图进行查询,则它们不受隐私策略保护。
复制¶
有关复制隐私策略和受隐私保护的表和视图时的注意事项,请参阅 隐私策略。
备注
如果复制表采用了与实体键关联的隐私策略,则目前对其查询时存在限制。在限制解除之前,对这些表的查询将被阻止。
Cross-Cloud Auto-Fulfillment¶
使用 Cross-Cloud Auto-Fulfillment 复制数据产品时,请注意以下几点:
接收复制数据产品的账户的管理员无法调整隐私预算。
管理员无法使用单个账户查看所有区域的隐私损失。
克隆¶
有关克隆受隐私保护的表和视图的影响,请参阅 克隆和差分隐私。
备注
如果克隆表采用了与实体键关联的隐私策略,则目前对其查询时存在限制。在限制解除之前,对这些表的查询将被阻止。
基于受隐私保护的基对象创建的视图¶
您可以在受隐私保护的表或视图上构建视图。但是,不会继承基表或视图的隐私域。因此,请注意以下几点:
必须在新视图的列上设置隐私域。
调整基表的隐私域不会影响在其上所构建视图的隐私域。
物化视图¶
您可以为物化视图分配隐私策略,使其受隐私保护。
隐私策略和物化视图之间的其他交互包括以下内容:
您不能基于受隐私保护的表或视图创建物化视图。
如果某表被用作物化视图的基表,则无法为该表分配隐私策略。
UDFs¶
分析师不能使用用户定义的函数查询受隐私保护的表。
流¶
无法查询基于受隐私保护表创建的流。
无法向流分配隐私策略。
其他策略¶
隐私策略与其他 Snowflake 策略通过以下方式交互:
- 掩码策略
无法将隐私策略和掩码策略分配给同一个表或视图。
- 行访问策略
行访问策略优先于隐私策略。如果一行被行访问策略阻止,则该行不会包含在差分隐私查询的结果中。
- 投影策略
目前,不支持在使用隐私策略保护表的同时使用投影策略保护其各列。虽然您可以通过该方式分配策略,但针对该表的查询将会失败。
- 聚合策略
无法将隐私策略和聚合策略分配给同一个表或视图。
动态表¶
如果引用的源表受隐私保护,则无法创建动态表。
您可以为现有动态表引用的表分配隐私策略;但是,一旦分配了策略,动态表将不再刷新。
外部表¶
您可以向外部表分配隐私策略。如果分析师尝试在 VARIANT 列上进行聚合,则查询会失败。但是,如果分析师尝试在虚拟列上进行聚合,则可成功查询。
Time Travel¶
对于 Time Travel,当将某表的旧版本复制为新表时,该表将使用当前版本的隐私域,因为 Snowflake 不会将旧版本的隐私域存储在表元数据中。