Cláusula mask
da coluna
Aplica-se a: SQL do Databricks Databricks Runtime 12.2 LTS e versões posteriores Somente Catálogo do Unity
Especifica uma função que é aplicada a uma coluna sempre que as 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. Isso pode ser útil para fins de um controle de acesso detalhado, em que a função pode inspecionar a identidade e/ou as filiações a grupos do usuário que a invocou para determinar se quer ocultar o valor.
Você pode adicionar máscaras de coluna quando:
- Criar uma tabela usando CREATE TABLE.
- Adicionar colunas a uma tabela com ALTER TABLE … ADD COLUMN.
- Alterando uma coluna com ALTER TABLE … ALTER COLUMN.
Importante
A máscara é aplicada assim que cada linha é buscada na fonte de dados. Todas as expressões, ordenações ou predicados são aplicados após o mascaramento. Por exemplo, a junção da coluna mascarada com outra coluna de outra tabela usará os valores mascarados para a comparação na junção.
Para obter mais informações sobre como usar as máscaras de coluna, consulte Filtrar dados confidenciais da tabela com 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 conversível no tipo de parâmetro SQL UDF. Se
func_name
requer mais parâmetros, os argumentos devem ser fornecidos pela cláusulaUSING COLUMNS
.O tipo de retorno da função deve ser conversível no tipo de dados da coluna mascarada.
-
Opcionalmente, especifica colunas adicionais da tabela da coluna mascarada a serem passadas para o
func_name
. Cadaother_column_name
um deve ser conversível no 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 está executando uma consulta relativa atable_name
, ao valor decolumn_identifier
e aother_column
opcional. constant_literal
Especifica um parâmetro constante com o tipo que corresponde a um parâmetro de função. Há suporte para os seguintes tipos:
STRING
, numérico (INTEGER
,FLOAT,
,DOUBLE
,DECIMAL
...),BOOLEAN
,INTERVAL
,NULL
.
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