ALTER MASKING POLICY

用新规则或新评论替换现有掩码策略规则,并允许重命名掩码策略。

在下一个使用掩码策略的 SQL 查询运行时,对策略规则所做的任何更改才会生效。

另请参阅:

掩码策略 DDL

语法

ALTER MASKING POLICY [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER MASKING POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name_to_mask>

ALTER MASKING POLICY [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER MASKING POLICY [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER MASKING POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'

ALTER MASKING POLICY [ IF EXISTS ] <name> UNSET COMMENT
Copy

参数

name

掩码策略的标识符;在策略的父架构中必须唯一。

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

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

RENAME TO new_name

指定掩码策略的新标识符;对于架构来说必须唯一。如果新标识符已用于其他掩码策略,则不能使用该标识符。

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

可以将对象移动到其他数据库和/或架构,同时选择重命名对象。为此,请指定一个限定 new_name 值,该值分别以 db_name.schema_name.object_nameschema_name.object_name 的形式包含新数据库和/或架构名称。

备注

  • 目标数据库和/或架构必须已存在。此外,新位置中不能存在同名对象;否则,该语句将返回错误。

  • 除非 对象所有者(即对对象拥有 OWNERSHIP 权限的角色)也拥有目标架构,否则禁止将对象移动到托管访问架构。

SET ...

指定要为掩码策略设置的一个(或多个)属性:

BODY -> expression_on_arg_name_to_mask

SQL 表达式,用于转换 arg_name_mask 指定的列中的数据。

表达式可以包括表示条件逻辑的 条件表达式函数、内置函数或用于转换数据的 UDFs。

如果在掩码策略主体中使用了 UDF 或外部函数,则策略所有者必须具有对 UDF 或外部函数的 USAGE 权限。用户如果查询已应用掩码策略的列,则不需要具有对 UDF 或外部函数的 USAGE 权限。

如果在条件掩码策略主体中使用了 UDF 或外部函数,则策略所有者必须具有对 UDF 或外部函数的 OWNERSHIP 权限。用户如果查询已应用条件掩码策略的列,则不需要对 USAGE 或外部函数具有 UDF 权限。

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

COMMENT = 'string_literal'

为掩码策略添加注释或覆盖现有注释。

默认:无值

UNSET ...

指定要为掩码策略取消设置的一个或多个属性和/或参数,这会将其重置为默认值:

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

重置属性/参数时,请仅指定名称;指定属性的值将返回错误。

访问控制要求

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

权限

对象

备注

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 权限。

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

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

有关掩码策略 DDL 和权限的其他详细信息,请参阅 管理列级安全性

使用说明

  • 如果您想要更新现有的掩码策略,并需要查看该策略的当前定义,请调用 GET_DDL 函数或运行 DESCRIBE MASKING POLICY 命令。

  • 您无法更改策略签名(即实参名称或输入/输出数据类型)。如果您需要更改签名,请对该策略执行 DROP MASKING POLICY 语句并创建新的策略。

  • 在执行 ALTER 语句之前,您可以执行 DESCRIBE MASKING POLICY 语句,确定用于更新策略的实参名称。

  • 对于在掩码策略正文中包含子查询的掩码策略,请在 WHEN 子句中使用 EXISTS。有关代表性示例,请参阅 CREATE MASKING POLICY 中“示例”部分的自定义授权表示例。

  • 如果策略 body 包含映射表查找,请创建一个集中式映射表,并将映射表存储在受保护表所在的数据库中。在 body 调用 IS_DATABASE_ROLE_IN_SESSION 函数时,这一点尤其重要。有关详细信息,请参阅函数使用说明。

  • 如果行访问策略引用了列,则无法向列添加掩码策略。有关更多信息,请参阅 ALTER ROW ACCESS POLICY

  • 如果在掩码策略中使用 UDF,请确保列的数据类型 UDF 与掩码策略匹配。有关更多信息,请参阅 掩码策略中的用户定义函数

  • 创建动态表之后,无法更改掩码策略。

  • 关于元数据:

    注意

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

示例

以下示例将掩码策略更新为使用 SHA-512 哈希值。没有 ANALYST 角色的用户将该值视为 SHA-512 哈希值,而具有 ANALYST 角色的用户将看到纯文本值。

DESCRIBE MASKING POLICY email_mask;
Copy
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
| Row | name       | signature     | return_type       | body                                                                  |
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
| 1   | EMAIL_MASK | (VAL VARCHAR) | VARCHAR(16777216) | case when current_role() in ('ANALYST') then val else '*********' end |
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
ALTER MASKING POLICY email_mask SET BODY ->
  CASE
    WHEN current_role() IN ('ANALYST') THEN VAL
    ELSE sha2(val, 512)
  END;
Copy
语言: 中文