CREATE PRIVACY POLICY

创建新的 隐私策略 或替换现有隐私策略。

另请参阅:

ALTER PRIVACY POLICYDESCRIBE PRIVACY POLICYDROP PRIVACY POLICYSHOW PRIVACY POLICIES

语法

CREATE [ OR REPLACE ] PRIVACY POLICY [ IF NOT EXISTS ] <name>
  AS () RETURNS PRIVACY_BUDGET -> <body>
  [ COMMENT = '<string_literal>' ]
Copy

必填参数

name

指定隐私策略的标识符(即名称)的字符串;对于在其中创建隐私策略的架构必须是唯一的。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

body

主体的 SQL 表达式会调用两个函数来控制策略的返回值:NO_PRIVACY_POLICY 和 PRIVACY_BUDGET。当对已分配策略的表执行查询时,Snowflake 会评估主体的条件以调用适当的函数并返回值。此返回值确定哪个隐私预算(如果有)与针对受隐私保护的表的查询相关联。

该表达式可以使用诸如 CURRENT_ROLEINVOKER_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> ]
)
Copy

隐私预算实参:

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:隐私预算永远不会刷新。

默认值:每周

可选参数

COMMENT = 'string_literal'

指定隐私策略的注释。

默认:无值

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE PRIVACY POLICY

架构

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

  • CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

示例

创建一个隐私策略,它始终返回名为 analysts 的预算。

CREATE PRIVACY POLICY my_priv_policy
  AS ( ) RETURNS PRIVACY_BUDGET ->
  PRIVACY_BUDGET(BUDGET_NAME=> 'analysts');
Copy

创建一个隐私策略,给予 admin 权限,使其不受限制地访问受隐私保护的表,同时将所有其他用户与隐私预算 analysts 相关联:

CREATE PRIVACY POLICY my_priv_policy
  AS () RETURNS PRIVACY_BUDGET ->
    CASE
      WHEN CURRENT_USER() = 'ADMIN'
        THEN NO_PRIVACY_POLICY()
      ELSE PRIVACY_BUDGET(BUDGET_NAME => 'analysts')
    END;
Copy
语言: 中文