屏蔽策略层次结构
在附加多个掩蔽策略时,请注意以下事项:
-
您可以将多个屏蔽策略附加到单个列。
-
当多个屏蔽策略适用于一个查询时,附加到每个相应列的最高优先级策略适用。考虑以下示例。
ATTACH MASKING POLICY partial_hash ON credit_cards(address, credit_card) TO ROLE analytics_role PRIORITY 20; ATTACH MASKING POLICY full_hash ON credit_cards(credit_card, ssn) TO ROLE auditor_role PRIORITY 30; SELECT address, credit_card, ssn FROM credit_cards;
运行 SELECT 语句时,同时具有分析和审计角色的用户会看到应用了
partial_hash
屏蔽策略的地址列。他们会看到应用了full_hash
掩蔽策略的信用卡和 SSN 列,因为full_hash
策略在信用卡列上的优先级更高。 -
如果在附加屏蔽策略时未指定优先级,则默认为优先级为 0。
-
您不能将两个具有相同优先级的策略附加到同一列。
-
您不能将两个策略附加到用户和列或角色和列的相同组合。
-
当多个掩蔽策略适用于同一 SUPER 路径,同时附加到同一用户或角色时,只有优先级最高的掩蔽策略才会生效。考虑以下示例。
第一个示例显示两个掩蔽策略附加在同一路径上,优先级较高的策略生效。
ATTACH MASKING POLICY hide_name ON employees(col_person.name) TO PUBLIC PRIORITY 20; ATTACH MASKING POLICY hide_last_name ON employees(col_person.name.last) TO PUBLIC PRIORITY 30; --Only the hide_last_name policy takes effect. SELECT employees.col_person.name FROM employees;
第二个示例显示两个掩蔽策略附加到同一 SUPER 对象中的不同路径,这两个策略之间没有冲突。这两个掩蔽策略将同时适用。
ATTACH MASKING POLICY hide_first_name ON employees(col_person.name.first) TO PUBLIC PRIORITY 20; ATTACH MASKING POLICY hide_last_name ON employees(col_person.name.last) TO PUBLIC PRIORITY 20; --Both col_person.name.first and col_person.name.last are masked. SELECT employees.col_person.name FROM employees;
要确认哪个掩蔽策略适用于给定的用户和列或角色和列组合,具有 sys:secadmin
角色的用户可以在 SVV_ATTACHED_MASKING_POLICY 系统视图中查找列/角色或列/用户对。有关更多信息,请参阅 用于动态数据掩蔽的系统视图。