ALTER ROW ACCESS POLICY¶
修改现有行访问策略的属性,包括重命名策略或替换策略规则。
在下一个使用行访问策略的 SQL 查询运行时,对策略规则所做的任何更改才会生效。
- 另请参阅:
语法¶
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name>
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> UNSET COMMENT
参数¶
name行访问策略的标识符;在策略的父架构中必须是唯一的。
标识符值必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如
"My object")。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求。
RENAME TO new_name指定行访问策略的新标识符;对于您的架构必须是唯一的。如果新标识符已用于其他的行访问策略,则不能使用该标识符。
有关更多详细信息,请参阅 标识符要求。
可以将对象移动到其他数据库和/或架构,同时选择重命名对象。为此,请指定一个限定
new_name值,该值分别以db_name.schema_name.object_name或schema_name.object_name的形式包含新数据库和/或架构名称。备注
目标数据库和/或架构必须已存在。此外,新位置中不能存在同名对象;否则,该语句将返回错误。
除非 对象所有者(即拥有对象 OWNERSHIP 权限的角色)也拥有目标架构,否则禁止将对象移动到托管访问架构。
SET ...指定要为行访问策略设置的一个(或多个)属性:
BODY -> expression_on_arg_name可筛选数据的 SQL 表达式。
表达式可以包括表示条件逻辑的 条件表达式函数、内置函数或用于转换数据的 UDFs。
如果在行访问策略的正文中使用了 UDF 或外部函数,则策略所有者必须对 UDF 或外部函数具有 OWNERSHIP 权限。对应用了行访问策略的数据库对象进行查询时,用户不需要对 UDF 或外部函数具有 USAGE 权限。
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 Tag quotas。
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 ROW ACCESS POLICY 命令。
您无法更改策略签名(即实参名称或输入/输出数据类型)。同样,如果策略被附加到了表或视图,则不支持使用
CREATE OR REPLACE ROW ACCESS POLICY。如果您需要更改签名,请对该策略执行 DROP ROW ACCESS POLICY 语句并创建新的行访问策略。在执行 ALTER 语句之前,您可以执行 DESCRIBE ROW ACCESS POLICY 语句,确定用于更新策略的实参名称。
在策略正文中包含一个或多个 子查询 可能会导致错误。如果可能,限制子查询的数量,限制 JOIN 操作的数量,并简化 WHERE 子句条件。
如果策略
body包含映射表查找,请创建一个集中式映射表,并将映射表存储在受保护表所在的数据库中。在body调用 IS_DATABASE_ROLE_IN_SESSION 函数时,这一点尤其重要。有关详细信息,请参阅函数使用说明。关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
以下示例更新了行访问策略。
DESC ROW ACCESS POLICY rap_table_employee_info;
+-------------------------+-------------+-------------+------+
| name | signature | return_type | body |
+-------------------------+-------------+-------------+------+
| rap_table_employee_info | (V VARCHAR) | BOOLEAN | true |
+-------------------------+-------------+-------------+------+
ALTER ROW ACCESS POLICY rap_table_employee_info SET BODY -> false;