COLUMN mask 子句

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 12.2 LTS 及更高版本 勾选“是” 仅 Unity Catalog

指定每当从表中获取行时应用于列的函数。 该列的所有后续查询将会收到对该列计算该函数(而不是该列的原始值)的结果。 这对于细粒度的访问控制目的非常有用,在这种情况下,该函数可以检查调用用户的身份或组成员身份,以确定是否编辑该值。

可以在以下情况下添加列掩码:

重要

从数据源提取每一行后,就会立即应用掩码。 所有表达式、谓词或排序将在屏蔽后应用。 例如,屏蔽列与另一个表中的另一列之间的联接会将屏蔽的值用于联接比较。

有关如何使用列掩码的详细信息,请参阅使用行筛选器和列掩码筛选敏感表数据

语法

MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]

参数

  • func_name

    至少具有一个参数的标量 SQL UDF

    SQL UDF 的第一个参数与屏蔽列 1:1 映射。 掩码列的类型必须可强制转换为 SQL UDF 参数类型。 如果 func_name 需要更多参数,则参数必须由 USING COLUMNS 子句提供。

    函数的返回类型必须可转换为屏蔽列的数据类型。

  • other_column_name

    (可选)指定掩码列的表的其他要传递到 func_name 的列。 每个 other_column_name 必须可转换为 func_name 的相应参数。

    使用列掩码根据用户对 table_name 执行查询、column_identifier 的值和 other_column(可选)来选择性地匿名化 column_identifier 的值。

  • constant_literal

    指定类型与函数参数匹配的常量参数。 支持以下类型:STRING、数字(INTEGERFLOAT,DOUBLEDECIMAL ...)BOOLEANINTERVALNULL

示例

你可以在使用行筛选器和列掩码筛选敏感表数据中找到更多示例。

-- Create a table with a masked column
> CREATE FUNCTION mask_ssn(ssn STRING) RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
> CREATE TABLE persons(name STRING, ssn STRING MASK mask_ssn);
> INSERT INTO persons VALUES('James', '123-45-6789');

-- As a non-member of 'HumanResourceDept'
> SELECT * FROM persons;
  James  ***-**-****

-- As a member of 'HumanResourceDept'
> SELECT * FROM persons;
  James  123-45-6789

-- Create a masking function with multiple parameters. When applied first parameter will be the column that masking function applies to
> CREATE FUNCTION mask_pii_regional(value STRING, region STRING)
  RETURN IF(is_account_group_member(region || '_HumanResourceDept'), value, 'REDACTED');

-- Create a table with a masked column. Masking function first parameter will be the column that is masked.
-- The rest of the parameters should be specified in `USING COLUMNS (<columnList>)` clause
> CREATE TABLE persons(name STRING, address STRING MASK mask_pii_regional USING COLUMNS (region), region STRING);
> INSERT INTO persons('James', '160 Spear St, San Francisco', 'US')

-- As a non-member of 'US_HumanResourceDept'
> SELECT * FROM persons;
  James | REDACTED | US

-- As a member of 'US_HumanResourceDept'
> SELECT * FROM persons;
  James | 160 Spear St, San Francisco | US