使用对象标签¶
本主题介绍如何创建标签并将其分配给 Snowflake 对象。其中还包含有关如何删除标签的说明。
创建标签¶
使用 CREATE TAG 命令创建新标签。例如,要创建名为 cost_center
且不带任何可选参数的基本标签,请执行以下操作:
CREATE TAG cost_center;
设置允许的标签值列表¶
ALLOWED_VALUES
标签参数允许您指定在 对象 上设置标签时可以分配给标签的字符串值列表。除非该值在定义的列表中,否则用户无法为标签分配值。
单个标签的最大可能字符串值数量为 300 个。每个标签的字符串值最多可为 256 个字符。
您可以在创建标签或将标签替换为 CREATE TAG 语句时,或用 ALTER TAG 语句修改现有标签键时,指定允许值列表。请注意, ALTER TAG 语句支持为标签添加允许的值 并 删除现有值。
备注
如果将标签配置为自动传播到目标对象,则允许列表中值的顺序会影响冲突的解决方式。有关更多信息,请参阅 标签传播冲突。
若要确定标签允许的值列表,请调用 SYSTEM$GET_TAG_ALLOWED_VALUES 函数。
示例¶
创建一个名为 finance
的标签,该标签仅允许两个字符串值,即 engineering
和 cost_center
:
CREATE TAG cost_center ALLOWED_VALUES 'finance', 'engineering';Copy
验证允许的值:
SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');Copy
修改名为 cost_center
的标签,将 marketing
添加为允许的字符串值:
ALTER TAG cost_center ADD ALLOWED_VALUES 'marketing';Copy
修改名为 cost_center
的标签,以将 engineering
从允许的字符串中删除:
ALTER TAG cost_center DROP ALLOWED_VALUES 'engineering';Copy
定义一个将自动传播的标签¶
PROPAGATE 标签参数允许您配置标签,使其在某些情况下自动从源对象传播到目标对象。PROPAGATE 参数可以设置为以下值之一:
PROPAGATE = ON_DEPENDENCY
:当存在 对象依赖关系 时,标签会传播到目标对象。PROPAGATE = ON_DATA_MOVEMENT
:当 数据 从源对象移动到目标对象时,标签会传播到目标对象。PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT
:存在对象依赖关系和数据移动时,标签都会传播。
有关传播的更多信息,请参阅 使用用户定义的标签自动传播标签。
示例¶
创建一个新标签,当存在对象依赖关系时,该标签会自动传播。
CREATE TAG data_sensitivity PROPAGATE = ON_DEPENDENCY;
更新现有标签,启用对象依赖关系和数据移动的自动传播。
ALTER TAG data_sensitivity SET PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT;
更新现有标签以禁用传播。
ALTER TAG data_sensitivity UNSET PROPAGATE;
设置标签¶
在对象上设置标签时,必须设置该标签的值。此字符串值最多可为 256 个字符。
创建标签的用户可能已经指定了允许值的列表,在这种情况下,您只能设置列表中的标签值。要获取给定标签允许的字符串值列表,请调用 SYSTEM$GET_TAG_ALLOWED_VALUES 函数。例如,假设标签 cost_center
存储在名为 governance
的数据库和名为 tags
的架构中,则可以执行以下操作来确定可以将标签值设置为 finance
还是 marketing
:
SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
+--------------------------------------------------------------+
| SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') |
|--------------------------------------------------------------|
| ["finance","marketing"] |
+--------------------------------------------------------------+
使用 Snowsight 设置标签¶
您可以使用 Snowsight 在现有表、视图和列上设置标签。
有多个选项可用于设置标签:
使用对象资源管理器(即 Data » Databases)导航到所需表、视图或列。
选择 More 菜单(即
...
) » Edit,然后选择 + Tag。按照提示管理标签分配。在 Snowsight 中导航到“Governance”区域(即 Monitoring » Governance),然后执行以下操作:
选择一个磁贴、分布百分比及最常用的标签或表之一。在 Dashboard 中选择一个项目时, Snowsight 会将您重定向到 Tagged Objects 选项卡。
按需修改筛选器。选择对象或列时, Snowsight 会将您重定向到对象资源管理器中的相应位置。按需更新标签分配。
直接导航到 Tagged Objects 选项卡。修改筛选器,选择对象或列,并管理标签分配。
备注
要访问 Governance 区域,Snowflake 账户必须是 Enterprise Edition 或更高版本。此外,您必须拥有以下角色之一:
使用 ACCOUNTADMIN 角色。
使用获授 GOVERNANCE_VIEWER 和 OBJECT_VIEWER 数据库角色的角色。
有关这些数据库角色的信息,请参阅 SNOWFLAKE 数据库角色。
使用 SQL 设置标签¶
您可以使用 SQL 命令在创建新对象时设置标签,或者在现有对象上设置标签。
要在正在创建的新对象上设置标签,请使用 CREATE ... WITH TAG 命令。例如,要为正在创建的仓库分配标签 cost_center
,请执行以下操作:
CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
要在现有对象上设置标签,请使用 ALTER ... SET TAG 命令。例如,要为现有仓库分配标签 cost_center
,请执行以下操作:
ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
扩展示例:用 SQL 创建和分配标签¶
以下是一个扩展示例,它概述了如何使用 SQL 来实现 Object Tagging。它向您展示了如何执行以下操作:
管理使用标签所需的访问控制权限。
为简化起见,工作流采用集中式方法管理标签,其中
tag_admin
自定义角色同时具有 CREATE TAG 和全局 APPLY TAG 权限。有关替代方法,请参阅 分配标签权限的方法。使用 CREATE TAG 语句创建标签。
使用 CREATE <object> 命令为新的 Snowflake 对象分配标签。
使用 ALTER <object> 命令为现有 Snowflake 对象分配标签。
创建自定义角色并分配权限。
在集中式管理方法中,
tag_admin
自定义角色负责为 Snowflake 对象创建和分配标签。请注意,此示例使用 ACCOUNTADMIN 系统角色。如果不希望在生产环境中使用此权限较高的角色,请验证为
tag_admin
自定义角色分配权限的角色是否具有限定tag_admin
自定义角色所需的权限。有关更多信息,请参阅 访问控制权限 (本主题内容)。USE ROLE USERADMIN; CREATE ROLE tag_admin; USE ROLE ACCOUNTADMIN; GRANT CREATE TAG ON SCHEMA mydb.mysch TO ROLE tag_admin; GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
Copy将
tag_admin
自定义角色授予充当标签管理员的用户。USE ROLE USERADMIN; GRANT ROLE tag_admin TO USER jsmith;
Copy执行 CREATE TAG 语句以创建标签。
USE ROLE tag_admin; USE SCHEMA mydb.mysch; CREATE TAG cost_center;
Copy将标签分配给新仓库。
USE ROLE tag_admin; CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
Copy将标签分配给现有仓库。
USE ROLE tag_admin; ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
Copy将标签分配给现有表的列。
ALTER TABLE hr.tables.empl_info MODIFY COLUMN job_title SET TAG cost_center = 'marketing';
Copy
删除标签¶
使用 DROP TAG 命令删除标签。执行命令时,在永久删除标签之前有 24 小时的宽限期。在宽限期内,您可以执行 UNDROP TAG 命令来恢复标签,这样做也会恢复标签和对象之间的所有标签分配(即引用)。
如果您想在删除之前确定哪些对象有标签,请查询 TAG_REFERENCES 视图(在“Account Usage”中)以确定标签分配情况。
访问控制权限¶
标签权限¶
Snowflake 支持以下权限,以便确定用户是否可以创建、设置和拥有标签。
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
权限 |
用途 |
---|---|
CREATE |
允许在架构中创建新的标签。 |
APPLY |
支持对 Snowflake 对象上的标签进行设置和取消设置操作。有关语法示例,请参阅 DDL 命令、操作和权限总结。 |
OWNERSHIP |
转移标签的所有权,从而授予对标签的完全控制权。更改标签的大多数属性时都需要此权限。 |
DDL 命令、操作和权限总结¶
下表总结了标签权限和 DDL 操作之间的关系。
操作 |
需要权限 |
---|---|
创建标签。 |
在同一架构中具有 CREATE TAG 权限的角色。 |
创建可传播的标签 |
具有标签 APPLY TAG ON ACCOUNT 和 OWNERSHIP 权限的角色。 |
更改标签。 |
具有标签的 OWNERSHIP 权限的角色。 |
删除和取消删除标签。 |
具有标签的 OWNERSHIP 权限以及标签所在的数据和架构的 USAGE 权限的角色。 |
显示标签。 |
以下其中一项:. 对存在标签的架构具有 USAGE 权限的角色,:emph:` 或 ` :newline:`.`具有 APPLY TAG ON ACCOUNT 权限的角色。 |
在对象上设置或取消设置标签。 |
对于单个对象,具有 APPLY TAG ON ACCOUNT 权限;或 该标签的 APPLY TAG 权限,以及设置此标签的对象的 OWNERSHIP 权限的角色。请参阅 受支持对象。 |
在列上设置或取消设置标签。 |
具有 APPLY TAG ON ACCOUNT 权限,或 标签的 APPLY 权限以及表或视图的 OWNERSHIP 权限的角色。 |
获取对象上的标签。 |
请参阅 SYSTEM$GET_TAG、TAG_REFERENCES 和 TAG_REFERENCES_WITH_LINEAGE。 |
分配标签权限的方法¶
本部分介绍分配创建和设置标签所需权限的不同方法。
对于
tag_admin
自定义角色在 所有 对象/列上创建和设置标签的集中式标签管理方法,需要以下权限:USE ROLE securityadmin; GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin; GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
Copy在混合管理方法中,单个角色具有 CREATE TAG 权限,以确保标签的命名一致,并且各个团队或角色具有特定标签的 APPLY 权限。
例如,可以向自定义角色
finance_role
授予在角色拥有的表和视图上设置标签cost_center
的权限(即该角色具有表或视图的 OWNERSHIP 权限):USE ROLE securityadmin; GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin; GRANT APPLY ON TAG cost_center TO ROLE finance_role;
Copy