使用隐私预算¶
本主题介绍已实现差分隐私的数据提供商可执行的隐私预算管理任务。有关隐私预算及其如何帮助防止查询泄露实体敏感信息的介绍,请参阅 限制隐私损失。
在隐私策略正文中定义隐私预算名称时,系统会自动创建隐私预算。不能创建独立于 隐私策略 的隐私预算。
要管理隐私预算,您需要拥有指定隐私预算的隐私策略的 OWNERSHIP 权限。
查看隐私预算¶
每个隐私预算都以隐私策略作为命名空间。可以有多个同名的隐私预算,但每个隐私预算对于一项隐私策略来说都是独一无二的。隐私策略中会进一步指定隐私预算的命名空间,指定为使用者账户产生的 隐私损失。因此,多个账户可以拥有名称和隐私损失限制相同的隐私预算,但 Snowflake 会分别统计每个账户的累计隐私损失。
查看隐私预算可看到隐私损失的限制,以及与预算相关的用户所造成的累计隐私损失。可以使用此信息来确定累计隐私损失是否已接近隐私预算限制。
备注
与隐私预算相关的累计隐私损失不包括数据提供商账户以外的账户所产生的隐私损失。
可通过以下两个选项查看隐私预算。对于这两个选项,只有与隐私预算相关的分析师造成隐私损失时,或管理员已 重置隐私预算 时,隐私预算才会出现。
要查询账户中的所有隐私预算, 可利用 Account Usage 架构中的 PRIVACY_BUDGETS 视图。ACCOUNT USAGE 架构中的 PRIVACY_BUDGETS 视图包含账户中的所有隐私预算。您可以使用它来查看与您拥有的所有隐私策略相关的隐私预算,还可以按名称筛选结果,以关注特定隐私预算。例如,要关注与
patients_policy
隐私策略关联的特定隐私预算,可以执行以下查询:SELECT * FROM snowflake.account_usage.privacy_budgets WHERE policy_name='patients_policy' AND budget_name='analyst_budget';
要查看与特定隐私策略关联的隐私预算, 可使用 CUMULATIVE_PRIVACY_LOSSES 表函数。您可使用 CUMULATIVE_PRIVACY_LOSSES 表函数检索与特定隐私策略关联的隐私预算。不同于 ACCOUNT USAGE 架构中的 PRIVACY_BUDGETS 视图,该函数没有固定延迟量,将会返回累计隐私损失的实时值。调用该函数时,隐私策略的名称必须为完全限定形式。
例如,要查看
my_policy_privacy
策略中指定的隐私预算,请执行以下操作:SELECT * FROM TABLE(SNOWFLAKE.DATA_PRIVACY.CUMULATIVE_PRIVACY_LOSSES( 'my_policy_db.my_policy_schema.my_policy_privacy'));
为隐私预算设置隐私设置¶
Snowflake 允许调整隐私预算对隐私损失的限制,以及每个汇总花费的最大隐私预算支出(统称为差分隐私中的 epsilon)。要设置这些控制措施,您可在隐私策略正文中指定以下参数:
BUDGET_LIMIT
– 设置隐私预算对累计隐私损失的限制。MAX_BUDGET_PER_AGGREGATE
– 设置每个汇总的最大隐私预算支出(即查询中每个聚合函数所产生的最大隐私损失)。
例如,要使用 ALTER PRIVACY POLICY 命令调整现有隐私预算的隐私控制措施,可执行以下命令:
ALTER PRIVACY POLICY users_policy SET BODY ->
PRIVACY_BUDGET(BUDGET_NAME=>'analysts',
BUDGET_LIMIT=>300,
MAX_BUDGET_PER_AGGREGATE=>0.1);
还可以在执行 CREATE PRIVACY POLICY 命令创建隐私策略时定义这些控制措施。
小心
更改 BUDGET_LIMIT
、MAX_BUDGET_PER_AGGREGATE
或 BUDGET_WINDOW
参数时,任何未在 ALTER PRIVACY POLICY 命令中指定的参数都将恢复为默认值。因此,在前面的示例中,决定 Snowflake 重置隐私预算频率的 BUDGET_WINDOW
参数将恢复为默认值。
有关设置隐私控制措施的更多信息,请参阅 调整隐私控制。
隐私预算刷新¶
关于刷新时间段¶
Snowflake 会定期将隐私预算的累计隐私损失重置为 0,以便分析师运行一组新的查询。这一刷新时间段被称为预算窗口。通过这种自动刷新功能,分析师即可在有新数据添加到表中时访问这些数据。从理论上来说,分析师尚未得知关于这些新数据的任何信息,因此让他们运行更多查询是合适的。
默认预算窗口为每周一次。
修改刷新时间段¶
要修改隐私预算刷新时间段,可更新隐私策略 privacy_budget
的 budget_window
值。例如:
ALTER PRIVACY POLICY users_policy SET BODY ->
PRIVACY_BUDGET(BUDGET_NAME=>'analysts', BUDGET_WINDOW=>'daily');
小心
更改 BUDGET_LIMIT
、MAX_BUDGET_PER_AGGREGATE
或 BUDGET_WINDOW
参数时,任何未在 ALTER PRIVACY POLICY 命令中指定的参数都将恢复为默认值。因此,在前面的例子中,BUDGET_LIMIT
和 MAX_BUDGET_PER_AGGREGATE
将恢复为默认值。
重置累计隐私损失¶
当分析师对受策略保护的数据执行查询时,Snowflake 会统计这些查询的累计隐私损失。您可以调用 RESET_PRIVACY_BUDGET 存储过程,将累计隐私损失重置为 0,从而允许分析师执行更多查询。
RESET_PRIVACY_BUDGET 存储过程的目的在于,在分析师无意中造成隐私损失并希望重新开始时重置预算。请注意,刷新隐私预算 时,隐私损失会自动设置为 0。
只有与指定账户中分析师关联的累计隐私损失才会重置为 0,即使隐私预算与多个账户中的分析师关联也是如此。
备注
调用 RESET_PRIVACY_BUDGET 时,累计隐私损失不会立即重置。它会在下一次查询导致隐私损失时重置。因此,如果在调用函数后、首次查询产生隐私损失前查看隐私预算,累计隐私损失不会是 0。
示例
下面举例说明如何将 companyorg.account_123
账户中执行查询的所有用户的隐私使用计数清零:
CALL SNOWFLAKE.DATA_PRIVACY.RESET_PRIVACY_BUDGET(
'my_policy_db.my_policy_schema.my_policy',
'analyst_budget',
'companyorg',
'account_123');