了解动态数据掩码¶
本主题提供动态数据掩码功能的总体概述。
要了解有关使用带有标签的掩码策略的更多信息,请参阅 基于标签的掩码策略。
什么是动态数据掩码?¶
动态数据掩码是一种列级安全功能,它使用掩码策略在查询时有选择地对表和视图列中的纯文本数据进行掩码处理。
在 Snowflake中,掩码策略是架构级对象,这意味着 Snowflake 中必须存在数据库和架构,然后才能将掩码策略应用于列。目前,Snowflake 支持在表和视图上使用动态数据掩码。
在查询运行时,掩码策略会应用于列出现的每个位置。根据掩码策略条件, SQL 执行上下文和角色层次结构,Snowflake 查询运算符可能会查看纯文本值、部分掩码值或完全掩码值。
有关掩码策略运行方式的更多详细信息,包括查询运行时行为、创建策略、表和视图的使用以及使用掩码策略的管理方法,请参阅:了解列级安全性。
要详细了解 SQL 执行上下文和角色层次结构的影响,请参阅 高级列级安全主题。
动态数据掩码的优点¶
下面总结了动态数据掩码的一些主要优点。
- 使用方便:
您可以编写一次策略并将其应用于数据库和架构中的数千个列。
- 数据管理和 SoD:
安全或隐私官决定保护哪些列,而不是对象所有者决定。掩码策略易于管理并支持集中式和分散式管理模型。
- 数据授权和治理:
按角色或自定义权利访问上下文数据。
支持安全或隐私官实施的数据治理,并可以禁止拥有 ACCOUNTADMIN 或 SECURITYADMIN 角色的授权用户在不必要的情况下查看数据。
- 数据共享:
在共享之前轻松掩码数据。
- 变更管理:
轻松更改掩码策略内容,无需将掩码策略重新应用到数千个列。
有关动态数据掩码和 External Tokenization 之间的优势比较,请参阅:列级安全优势。
动态数据掩码限制¶
有关限制的概述,请参阅 列级安全限制。
动态数据掩码注意事项¶
有关其他动态数据掩码注意事项,请参阅 列级安全注意事项。
动态数据掩码权限¶
下表总结了与动态数据掩码相关的权限。
权限 |
用途 |
---|---|
CREATE |
允许在架构中创建新的掩码策略。 |
APPLY |
允许在列上对 掩码策略 执行取消设置和设置操作。 请注意,授予全局 APPLY MASKING POLICY 权限(即 ACCOUNT 上的 APPLY MASKING POLICY)允许对表和视图执行 DESCRIBE 操作。 有关语法示例,请参阅 掩码策略权限。 |
OWNERSHIP |
授予对掩码策略的完全控制权。需要更改掩码策略的大多数属性。同一时间只有一个角色可以在特定对象上拥有此权限。 |
备注
操作掩码策略还需要父数据库和架构的 USAGE 权限。
动态数据掩码 DDL¶
Snowflake 提供以下一组命令来管理动态数据掩码策略。
审计动态数据掩码¶
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 视图中。
动态数据掩码故障排除¶
您可以使用错误消息来帮助解决掩码策略问题。
错误消息¶
下表描述了 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 权限。 |
后续主题: