了解 External Tokenization¶
本主题提供 External Tokenization 功能的总体概述。
请注意,可以将 External Tokenization 掩码策略分配给标签,以提供基于标签的 External Tokenization。有关为标签分配掩码策略的详细信息,请参阅 基于标签的掩码策略。
重要
External Tokenization 需要 编写外部函数,这些函数包含在 Snowflake Standard Edition 中,并且您可以将外部函数与令牌化提供程序搭配使用。
但是,如果您选择将令牌化提供程序 与 Snowflake External Tokenization 进行集成,您必须升级到 Enterprise Edition 或更高版本。
如需咨询升级事宜,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。
什么是 External Tokenization?¶
通过 External Tokenization,账户能够在将数据加载到 Snowflake 之前对数据进行标记化,并在查询运行时对数据进行去标记化。令牌化是通过用无法破译的令牌替换敏感数据来移除敏感数据的过程。External Tokenization 使用带有 外部函数 的掩码策略。
在 Snowflake中,掩码策略是架构级对象,这意味着 Snowflake 中必须存在数据库和架构,然后才能将掩码策略应用于列。目前,Snowflake 支持在表和视图上使用动态数据掩码。
在查询运行时,掩码策略会应用于列出现的每个位置。根据掩码策略条件, SQL 执行上下文和角色层次结构,Snowflake 查询运算符可能会查看纯文本值、部分掩码值或完全掩码值。
有关掩码策略运行方式的更多详细信息,包括查询运行时行为、创建策略、表和视图的使用以及使用掩码策略的管理方法,请参阅:了解列级安全性。
要详细了解 SQL 执行上下文和角色层次结构的影响,请参阅 高级列级安全主题。
在加载到 Snowflake 之前对数据进行令牌化,可确保敏感数据不会在不必要的情况下暴露。将掩码策略与外部函数结合使用,可确保只有相应受众才能在查询运行时查看去标记化的数据。
External Tokenization 的优点¶
下面总结了 External Tokenization 的一些主要优点。
- 预加载标记化数据:
使用标记化提供程序,标记化数据可预加载到 Snowflake 中。因此,即使不对表或视图中的列应用掩码策略,用户也永远不会看到真实的数据值。这为组织中最敏感的数据提供了增强的数据安全性。
- 使用方便:
您可以编写一次策略并将其应用于数据库和架构中的数千个列。
- 数据管理和 SoD:
安全或隐私官决定保护哪些列,而不是对象所有者决定。掩码策略易于管理并支持集中式和分散式管理模型。
- 数据授权和治理:
按角色或自定义权利访问上下文数据。
支持安全或隐私官实施的数据治理,并可以禁止拥有 ACCOUNTADMIN 或 SECURITYADMIN 角色的授权用户在不必要的情况下查看数据。
- 变更管理:
轻松更改掩码策略内容,无需将掩码策略重新应用到数千个列。
有关动态数据掩码和 External Tokenization 之间的优势比较,请参阅:列级安全优势。
External Tokenization 限制¶
有关限制的概述,请参阅 列级安全限制。
External Tokenization 注意事项¶
有关其他 External Tokenization 注意事项,请参阅 列级安全注意事项。
External Tokenization 权限和依赖项¶
下表总结了与 External Tokenization 掩码策略相关的权限。
权限 |
用途 |
---|---|
CREATE |
允许在架构中创建新的掩码策略。 |
APPLY |
允许在列上对 掩码策略 执行取消设置和设置操作。 请注意,授予全局 APPLY MASKING POLICY 权限(即 ACCOUNT 上的 APPLY MASKING POLICY)允许对表和视图执行 DESCRIBE 操作。 有关语法示例,请参阅 掩码策略权限。 |
OWNERSHIP |
授予对掩码策略的完全控制权。需要更改掩码策略的大多数属性。同一时间只有一个角色可以在特定对象上拥有此权限。 |
备注
操作掩码策略还需要父数据库和架构的 USAGE 权限。
由于 External Tokenization 掩码策略需要依赖于 API 集成的外部函数,因此下表总结了自定义角色(例如 MASKING_ADMIN)必须具有的 Snowflake 对象的权限。请注意,这些权限仅适用于自定义角色,对于使用掩码策略查询列的用户角色来说不是必需的。
自定义角色 |
权限 |
对象 |
---|---|---|
External Tokenization 策略所有者 |
USAGE |
外部函数 |
外部函数所有者(即具有外部函数 OWNERSHIP 权限的角色) |
USAGE |
任何由外部函数引用的 API 集成对象。 |
External Tokenization DDL¶
Snowflake 提供以下一组命令来管理 External Tokenization 策略。
审计 External Tokenization¶
Snowflake 提供了两个 Account Usage 视图来获取有关掩码策略的信息:
MASKING POLICIES 视图提供 Snowflake 账户中所有掩码策略的列表。
POLICY_REFERENCES 视图提供设置了掩码策略的所有对象的列表。
Information Schema 表函数 POLICY_REFERENCES 可用于以下任一操作:
返回在列上设置了掩码策略的所有对象(即表、视图)的列表。
返回具有指定对象名称和对象类型的策略关联列表。
Snowflake 记录用户在 历史记录页面 上(在 Web 界面中)运行的原始查询。该查询可在 SQL Text 列中找到。
特定查询中使用的掩码策略名称可以在 Query Profile 中找到。
查询历史记录仅特定于 Account Usage QUERY_HISTORY 视图。在此视图中, Query Text 列包含 SQL 语句的文本。掩码策略名称不包含在 QUERY_HISTORY 视图中。
External Tokenization 故障排除¶
您可以使用错误消息来帮助解决掩码策略问题。
错误消息¶
下表描述了 Snowflake 在使用掩码策略时可能返回的错误消息。
行为 |
错误消息 |
故障排除操作 |
---|---|---|
无法将掩码策略应用于 Snowflake 功能。 |
不支持的功能 |
掩码策略目前不适用于此功能。 |
活跃角色无法创建或替换掩码策略。 |
SQL 访问控制错误:没有足够的权限来操作账户 <account_name> |
使用 |
给定角色无法将掩码策略附加到表。 |
SQL 编译错误:数据库 <database_name> 不存在或未授权。 |
使用 |
不拥有表上的掩码策略的给定角色,会尝试在他们可以使用的表上应用掩码策略。 |
SQL 编译错误:掩码策略 <policy_name> 不存在或未授权。 |
使用 |
无法使用 |
SQL 编译错误:无法删除/替换策略 <policy_name>,因为它与一个或多个实体相关联。 |
首先使用 ALTER TABLE ...MODIFY COLUMN 或 ALTER VIEW ...MODIFY COLUMN 语句 UNSET 策略,然后再次尝试 DROP 语句。 |
恢复已删除的表会产生掩码策略错误。 |
SQL 执行错误:列 <column_name> 已附加到不存在的掩码策略。请联系策略管理员。 |
使用 ALTER Table/View MODIFY COLUMN 语句取消设置当前附加的掩码策略,然后使用 CREATE OR REPLACE 语句将掩码策略重新应用到列。 |
无法将掩码策略应用于特定列,但可以将掩码策略应用于其他列。 |
指定的列已附加到另一个掩码策略。一列不能附加到多个掩码策略。请删除当前关联的掩码策略,以便附加新的掩码策略。 |
决定应将哪种掩码策略应用于该列,进行更新并重试。 |
无法使用 ALTER 语句更新策略。 |
SQL 编译错误:掩码策略 <policy_name> 不存在或未授权。 |
通过执行 |
拥有克隆表的角色无法取消设置掩码策略。 |
SQL 访问控制错误:没有足够的权限来操作 ALTER TABLE UNSET MASKING POLICY '<policy_name>' |
使用:samp:grant apply on masking policy <policy_name> to role <role_name>; 将 APPLY 权限授予拥有克隆表的角色 . 使用 |
使用 IF EXISTS 更新策略会返回成功结果,但不会更新策略。 |
返回“没有错误消息”;Snowflake 返回“语句执行成功”。 |
从 ALTER 语句中删除 IF EXISTS,然后重试。 |
使用 CASE 创建或替换掩码策略时,数据类型不匹配(例如 [VAL 字符串] -> 返回数字)。 |
SQL 编译错误:掩码策略函数实参和返回类型不匹配。 |
使用 CREATE OR REPLACE 语句或 ALTER MASKING POLICY 语句,使用具有匹配数据类型的 CASE 更新掩码策略。 |
将掩码策略应用到虚拟列。 |
SQL 编译错误:掩码策略无法附加到 VIRTUAL_COLUMN 列。 |
将掩码策略应用于源表中的列。 |
将掩码策略应用于物化视图。 |
SQL 编译错误:行 <number> 的位置 <number> 出现意外的“修改”语法错误。. SQL 编译错误:行 <number> 的位置 <number> 存在无效标识符“<character>”错误 . SQL 执行错误:表上存在一个或多个物化视图。mvs 数=<number>,表名=<table_name>。 |
将掩码策略应用于源表中的列。有关更多信息,请参阅 限制。 |
在用于创建物化视图的表列中应用掩码策略。 |
SQL 编译错误:掩码策略无法附加到 MATERIALIZED_VIEW 列。 |
要将掩码策略应用到表列,请删除物化视图。 |
创建物化视图时包括掩码的列。 |
不支持的功能“CREATE ON MASKING POLICY COLUMN”。 |
创建物化视图时不包含掩码的列,或者 不对基表或视图设置任何掩码策略,创建物化视图,然后将掩码策略应用于物化视图列。 |
无法在掩码策略主体中创建具有用户定义函数 (UDF) 的掩码策略。 |
SQL 访问控制错误:没有足够的权限来操作函数“<udf_name>” |
验证创建掩码策略的角色有没有 UDF 的 USAGE 权限。 |
后续主题:
使用条件令牌化 (有关带有条件列的 External Tokenization 策略示例,请参阅 CREATE MASKING POLICY。)