ALTER PRIVACY POLICY¶
修改现有 :doc:`隐私策略 </user-guide/diff-privacy/differential-privacy-admin-privacy-policies>`的属性。
小心
更改 budget_limit
、max_budget_per_aggregate
或 budget_window
时,ALTER 命令中未指定的所有属性都将恢复为其默认值。要获取参数的当前值,请执行 DESCRIBE PRIVACY POLICY 命令。
语法¶
ALTER PRIVACY POLICY [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET BODY -> <expression>
ALTER PRIVACY POLICY <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER PRIVACY POLICY <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER PRIVACY POLICY [ IF EXISTS ] <name> UNSET COMMENT
参数¶
name
指定要更改的隐私策略的标识符。
如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
有关更多信息,请参阅 标识符要求。
RENAME TO new_name
指定隐私策略的新标识符;对于架构来说必须唯一。如果新标识符已用于其他隐私策略,则不能使用该标识符。
有关更多信息,请参阅 标识符要求。
可以将对象移动到其他数据库和/或架构,同时选择重命名对象。为此,请指定一个限定
new_name
值,该值分别以db_name.schema_name.object_name
或schema_name.object_name
的形式包含新数据库和/或架构名称。备注
目标数据库和/或架构必须已存在。此外,新位置中不能存在同名对象;否则,该语句将返回错误。
除非 对象所有者(即拥有对象 OWNERSHIP 权限的角色)也拥有目标架构,否则禁止将对象移动到托管访问架构。
SET ...
指定要为隐私策略设置的一个(或多个)属性:
BODY -> expression
指定策略的新主体。
主体的 SQL 表达式会调用两个函数来控制策略的返回值:NO_PRIVACY_POLICY 和 PRIVACY_BUDGET。当对已分配策略的表执行查询时,Snowflake 会评估主体的条件以调用适当的函数并返回值。此返回值确定哪个隐私预算(如果有)与针对受隐私保护的表的查询相关联。
该表达式可以使用诸如 CURRENT_ROLE 或 INVOKER_ROLE 的上下文函数来将用户或用户组与隐私预算相关联。
如果在主体的表达式中使用 CASE 块,则它必须包含调用 NO_PRIVACY_POLICY 或 PRIVACY_BUDGET 的 ELSE 语句。每个用户都必须与隐私预算相关联,或者可以不受限制地访问受隐私保护的表。如果用户不应该对受隐私保护的表或视图具有任何访问权限,请撤销 SELECT 权限,而非尝试在隐私策略中定义此权限。
NO_PRIVACY_POLICY
如果您想要查询,从而能够不受限制地访问采用了隐私策略的表或视图,请使用主体的表达式来调用
NO_PRIVACY_POLICY
函数。PRIVACY_BUDGET
当您希望从策略返回隐私预算时,请使用主体的表达式调用
PRIVACY_BUDGET
函数。表达式可以包含一些条件,允许策略根据执行查询的用户等因素,为不同的查询返回不同的隐私预算。在跨账户协作中,隐私预算会自动以使用者账户的账户标识符进行命名,这样即便隐私预算的名称相同,两个不同的使用者账户也无法共享相同的隐私预算。使用 CURRENT_ACCOUNT 函数将账户名称与隐私预算名称连接起来可有助于区分隐私预算。例如,您可以按如下方式调用该函数:
PRIVACY_BUDGET(BUDGET_NAME => 'external_budget.' || CURRENT_ACCOUNT())
。PRIVACY_BUDGET
函数的签名是:PRIVACY_BUDGET( BUDGET_NAME=> '<string>' [, BUDGET_LIMIT=> <decimal> ] [, MAX_BUDGET_PER_AGGREGATE=> <decimal> ] [, BUDGET_WINDOW=> <string> ] )
隐私预算实参:
BUDGET_NAME => expression
解析为隐私预算的名称。在隐私策略的主体中指定了隐私策略名称时,Snowflake 会自动创建隐私预算。
BUDGET_LIMIT => decimal
十进制数 > 0 that specifies the budget limit for this privacy policy. This controls the total amount of privacy loss allowed. Adjusting this value changes how many total differentially private aggregates can be calculated against tables protected by this privacy budget during the refresh period. When a query is run that would cause the cumulative privacy loss to exceed this number, the query will fail. As a rough estimate, a budget limit of 233 with
MAX_BUDGET_PER_AGGREGATE=1
允许每个刷新周期约 1000 个汇总。默认值:233.0
MAX_BUDGET_PER_AGGREGATE => decimal
指定查询中每个聚合函数的隐私预算使用量。调整此值将更改添加到每个聚合查询的噪声量,以及在达到预算限制之前可以计算的汇总数。例如,查询
select count(*), avg(a) ...
有两个聚合:count(*)
和avg(a)
。指定一个 > 0 的十进制值。默认值:0.5
BUDGET_WINDOW => string
隐私预算的刷新频率,即其累积隐私损失重置为 0 的频率。有效值:
Daily
:每天 12:00 AM UTC 刷新Weekly
:每周日 12:00 AM UTC 刷新Monthly
:日历月第一天 12:00 AM UTC 刷新Yearly
:1 月 1 日 12:00 AM UTC 刷新Never
:隐私预算永远不会刷新。
默认值:每周
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 对象和列的标签配额。
COMMENT = 'string_literal'
为隐私策略添加注释或覆盖现有注释。
默认:无值
UNSET ...
指定要取消设置的一个或多个属性和/或参数,方法是将其重置为隐私策略的默认值:
TAG tag_name [ , tag_name ... ]
COMMENT
重置属性/参数时,请仅指定名称;指定属性的值将返回错误。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
OWNERSHIP |
隐私策略 |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
如果您要更新现有隐私策略,并且需要查看该策略的当前定义,请运行 DESCRIBE PRIVACY POLICY 命令。您还可以使用 GET_DDL 函数获取隐私策略的完整定义,包括其主体。
禁止将隐私策略移动到 托管访问架构 <label-managed_access_schemas>`(使用 ALTER PRIVACY POLICY ...RENAME TO 语法),:emph:`除非 隐私策略所有者(即,对隐私策略具有 OWNERSHIP 权限的角色)还拥有目标架构。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
修改隐私策略 my_priv_policy
的主体,使其始终返回名为 analysts
的预算:
-- Modify the body of privacy policy "my_priv_policy" so it always returns a -- budget named "analysts" ALTER PRIVACY POLICY my_priv_policy SET BODY -> PRIVACY_BUDGET(BUDGET_NAME => 'analysts'); -- Set budget limit to 50 and max budget per aggregate to 0.1 -- budget window is not mentioned so it is reset to its default value ALTER PRIVACY POLICY users_policy SET BODY -> privacy_budget(budget_name=>'analysts', budget_limit=>50, max_budget_per_aggregate=>0.1);