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

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

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

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 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 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
语言: 中文