Cláusula de coluna mask
Aplica-se a: Databricks SQL Databricks Runtime 12.2 LTS e superior somente Unity Catalog
Especifica uma função que é aplicada a uma coluna sempre que linhas são buscadas na tabela. Todas as consultas subsequentes dessa coluna recebem o resultado da avaliação dessa função sobre a coluna no lugar do valor original da coluna. Isso pode ser útil para fins de controle de acesso refinado, onde a função pode inspecionar a identidade ou as associações de grupo do usuário que invoca para determinar se o valor deve ser redigido.
Você pode adicionar máscaras de coluna quando:
- Crie uma tabela usando CREATE TABLE.
- Adicionar colunas a uma tabela com ALTER TABLE ... ADICIONAR COLUNA.
- Alterando uma coluna com ALTER TABLE ... COLUNA ALTER.
Importante
A máscara é aplicada assim que cada linha é buscada na fonte de dados. Quaisquer expressões, predicados ou ordens são aplicadas após a mascaragem. Por exemplo, unir a coluna mascarada contra outra coluna de outra tabela usará os valores mascarados para a comparação de junção.
Para obter mais informações sobre como usar máscaras de coluna, consulte Filtrar dados de tabela confidenciais usando filtros de linha e máscaras de coluna.
Sintaxe
MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]
Parâmetros
-
Um SQL UDF escalar com pelo menos um parâmetro.
O primeiro parâmetro do SQL UDF mapeia 1:1 com a coluna mascarada. O tipo da coluna mascarada deve ser convertível para o tipo de parâmetro SQL UDF. Se
func_name
exigir mais parâmetros, osUSING COLUMNS
argumentos devem ser fornecidos pela cláusula.O tipo de retorno da função deve ser convertível para o tipo de dados da coluna mascarada.
-
Opcionalmente, especifica colunas adicionais da tabela da coluna mascarada para passar para
func_name
. Cadaother_column_name
um deve ser moldável para o parâmetro correspondente defunc_name
.Use uma máscara de coluna para anonimizar seletivamente o valor de
column_identifier
com base no usuário que executa uma consulta contratable_name
, o valor decolumn_identifier
e o opcionalother_column
. constant_literal
Especifica um parâmetro constante com o tipo correspondendo a um parâmetro de função. Os seguintes tipos são suportados:
STRING
, numérico (INTEGER
,FLOAT,
DOUBLE
,DECIMAL
...),BOOLEAN
, ,NULL
INTERVAL
.
Exemplos
Você pode encontrar mais exemplos em Filtrar dados confidenciais da tabela usando filtros de linha e máscaras de coluna.
-- 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