COLUMN mask
-Klausel
Gilt für: Databricks SQL Databricks Runtime 12.2 LTS und höher Nur Unity Catalog
Gibt eine Funktion an, die auf eine Spalte angewandt wird, wenn Zeilen aus der Tabelle abgerufen werden. Alle zukünftigen Abfragen von dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion über die Spalte anstelle des ursprünglichen Wertes der Spalte. Dies kann für eine präzise Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaft der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob der Wert zurückgezogen werden soll.
Sie können Spaltenformate hinzufügen, wenn Sie:
- Eine Tabelle mit CREATE TABLE erstellen.
- Spalten zu einer Tabelle mit ALTER TABLE .… ADD COLUMN hinzufügen.
- Einer Spalte mit ALTER TABLE ... ALTER COLUMN ändern.
Wichtig
Die Maske wird angewandt, wenn Zeilen aus der Datenquelle abgerufen werden. Alle Ausdrücke, Prädikate oder Sortierungen werden nach der Maskierung angewandt. Beim Verknüpfen zwischen der maskierten Spalte und einer anderen Spalte aus einer anderen Tabelle werden die maskierten Werte beispielsweise für den Verknüpfungsvergleich verwendet.
Weitere Informationen zur Verwendung von Spaltenformaten finden Sie unter Filtern vertraulicher Tabellendaten mit Zeilenfiltern und Spaltenformaten.
Syntax
MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]
Parameter
-
Eine skalare SQL-UDF mit mindestens einem Parameter.
Der erste Parameter der SQL-UDF wird 1:1 der maskierten Spalte zugeordnet. Der Typ der maskierten Spalte muss in den SQL-UDF-Parametertyp umgewandelt werden können. Wenn
func_name
weitere Parameter erfordert, müssen die Argumente von derUSING COLUMNS
-Klausel bereitgestellt werden.Der Rückgabetyp der Funktion muss in den Datentyp der maskierten Spalte umgewandelt werden können.
-
Gibt optional zusätzliche Spalten der Tabelle der maskierten Spalte an, die an
func_name
übergeben werden sollen. Jedeother_column_name
muss in den entsprechenden Parameter vonfunc_name
konvertiert werden können.Verwenden Sie eine Spaltenmaske, um den Wert
column_identifier
selektiv zu anonymisieren, basierend auf den Benutzer*innen, die eine Abfrage vontable_name
ausführen, dem Wert voncolumn_identifier
und den optionalenother_column
-Werten. constant_literal
Gibt einen Konstantenparameter an, dessen Typ einem Funktionsparameter entspricht. Die folgenden Typen werden unterstützt:
STRING
, numerische Typen (INTEGER
,FLOAT,
DOUBLE
,DECIMAL
, …),BOOLEAN
,INTERVAL
,NULL
.
Beispiele
Weitere Beispiele finden Sie unter Filtern vertraulicher Tabellendaten mit Zeilenfiltern und Spaltenmasken.
-- 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