Klauzule Column mask
Platí pro: Databricks SQL Databricks Runtime 12.2 LTS a vyšší pouze katalog Unity
Určuje funkci, která se použije u sloupce při každém načtení řádků z tabulky. Všechny následné dotazy z tohoto sloupce obdrží výsledek vyhodnocení této funkce místo původní hodnoty sloupce. To může být užitečné pro jemně odstupňované účely řízení přístupu, kdy funkce může zkontrolovat členství v identitě nebo skupině vyvolání uživatele a určit, jestli se má hodnota redakce provést.
Masky sloupců můžete přidat, když:
- Vytvořte tabulku pomocí příkazu CREATE TABLE.
- Přidání sloupců do tabulky pomocí PŘÍKAZU ALTER TABLE ... PŘIDAT SLOUPEC.
- Změna sloupce pomocí příkazu ALTER TABLE ... ALTER COLUMN.
Důležité
Maska se použije, jakmile se každý řádek načte ze zdroje dat. Všechny výrazy, predikáty nebo řazení se použijí po maskování. Například spojení mezi maskovaným sloupcem a jiným sloupcem z jiné tabulky použije maskované hodnoty pro porovnání spojení.
Další informace o tom, jak používat masky sloupců, najdete v tématu Filtrování citlivých dat tabulky pomocí filtrů řádků a masek sloupců.
Syntaxe
MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]
Parametry
-
Skalární UDF SQL s alespoň jedním parametrem.
První parametr UDF SQL mapuje 1:1 s maskovaným sloupcem. Typ maskovaného sloupce musí být přetypovaný na typ parametru UDF SQL. Pokud
func_name
vyžaduje více parametrů, argumenty musí být poskytovány klauzulíUSING COLUMNS
.Návratový typ funkce musí být přetypovaný na datový typ maskovaného sloupce.
-
Volitelně můžete zadat další sloupce tabulky maskovaného sloupce, které se mají
func_name
předat . Každýother_column_name
musí být přetypován na odpovídající parametrfunc_name
.Maska sloupce slouží k selektivní anonymizaci hodnoty
column_identifier
na základě uživatele, který provádí dotaztable_name
na , hodnotucolumn_identifier
a volitelnouother_column
. constant_literal
Určuje konstantní parametr s typem, který odpovídá parametru funkce. Podporují se následující typy:
STRING
, číselná (INTEGER
,FLOAT,
DOUBLE
,DECIMAL
...),BOOLEAN
,INTERVAL
,NULL
.
Příklady
Další příklady najdete v části Filtrování citlivých dat tabulky pomocí filtrů řádků a masek sloupců.
-- 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