Udostępnij za pośrednictwem


Klauzula kolumny mask

Dotyczy:oznaczony jako tak Databricks SQL oznaczony jako tak Databricks Runtime 12.2 LTS i nowsze oznaczony jako tak tylko Unity Catalogu

Określa funkcję, która jest stosowana do kolumny za każdym razem, gdy wiersze są pobierane z tabeli. Wszystkie kolejne zapytania z tej kolumny otrzymują wynik oceny tej funkcji w kolumnie zamiast oryginalnej wartości kolumny. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego w celu określenia, czy zredagować wartość.

Maski kolumn można dodawać, gdy:

Ważne

Maska jest stosowana natychmiast po pobraniu każdego wiersza ze źródła danych. Wszystkie wyrażenia, predykaty lub kolejność są stosowane po maskowaniu. Na przykład łączenie zamaskowanej kolumny z inną kolumną z innej tabeli spowoduje użycie zamaskowanych wartości do porównania łączenia.

Aby uzyskać więcej informacji na temat używania masek kolumn, zobacz Tabele usługi Azure Databricks.

Składnia

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

Parametry

  • func_name

    Skalarna funkcja zdefiniowanej przez użytkownika SQL z co najmniej jednym parametrem.

    Pierwszy parametr funkcji UDF SQL mapuje się 1:1 z zamaskowaną kolumną. Typ maskowanej kolumny musi być rzutowany do typu parametru UDF SQL. Jeśli func_name wymaga więcej parametrów, argumenty muszą być podane przez klauzulę USING COLUMNS.

    Zwracany typ funkcji musi być konwertowany na typ danych maskowanej kolumny.

    Ważne

    Jeśli typ danych maskowanej kolumny nie jest dokładnie zgodny z typem parametru funkcji, wartość kolumny jest niejawnie rzutowana. Po ANSI_MODE wyłączeniu wartości, których nie można rzutować, są w trybie dyskretnym konwertowane na NULLwartość , co może powodować nieoczekiwane wyniki maskowania. Typy parametrów UDF muszą być zgodne z typami danych kolumn przekazanych do nich. Zobacz Zachowanie niezgodności typów danych.

  • inna_nazwa_kolumny

    Opcjonalnie określa dodatkowe kolumny tabeli kolumny zamaskowanej, które mają być przekazywane do elementu func_name. Każdy other_column_name musi być rzutowalny do odpowiedniego parametru func_name.

    Użyj maski kolumny, aby selektywnie anonimizować wartość column_identifier na podstawie użytkownika wykonującego zapytanie do table_name, wartość column_identifier oraz opcjonalnie other_column.

  • constant_literal

    Określa stały parametr z typem pasującym do parametru funkcji. Obsługiwane są następujące typy: STRING, numeryczne (INTEGER, FLOAT,DOUBLE, ... DECIMAL ), BOOLEAN, INTERVAL, NULL.

Przykłady

Więcej przykładów można znaleźć w tabelach usługi Azure Databricks. Aby zapoznać się z przykładami demonstrującymi klauzulę USING COLUMNS , zobacz Maska kolumn z dodatkowymi kolumnami (USING COLUMNS).

-- 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