Proteja novas tabelas por default com tagsde controle.
Este tutorial mostra como bloquear automaticamente novas tabelas e liberá-las somente após a gestão de dados revisar e classificar seu conteúdo. Utiliza:
- Uma tag de controle
review_statusem nível de esquema, portanto, toda nova tabela no esquema é mascarada por default - Classificação de dados para detectar e tag automaticamente colunas sensíveis com tagsdo sistema
class.* - A função
system.data_classification.mask_valueintegrada para mascaramento com reconhecimento de tipo - Duas políticas: uma que oculta todas as colunas enquanto uma tabela está pendente de revisão e outra que oculta apenas as colunas classificadas após a revisão.
Pré-requisitos
- Databricks Runtime 16.4 ou superior, ou compute serverless .
- Permissões de administrador da conta ou administrador workspace (para criar tags controladas e ativar a Classificação de Dados).
MANAGEpermissão no catálogo ou esquema de destino.EXECUTEnas UDFs.- Um notebook SQL ou editor de consultas.
Cenário
Sua organização adiciona regularmente novas tabelas a um esquema Unity Catalog devido a aquisições, integrações de parceiros ou novos recursos de produtos. Por default, qualquer usuário com SELECT no esquema pode consultar imediatamente novas tabelas, incluindo colunas que podem conter PII não classificadas.
O padrão tag de controle resolve isso: uma tag de nível de esquema review_status = pending faz com que cada nova tabela no esquema seja totalmente mascarada por default. A Classificação de Dados examina a tabela em segundo plano e aplica tags class.* às colunas sensíveis detectadas. Após uma gestão de dados revisar as classificações e corrigir quaisquer falsos positivos, eles mudam review_status para reviewed no nível da tabela. Isso substitui a tag de esquema herdada e uma segunda política entra em ação: mascarando apenas as colunas com tags class.*enquanto deixa as colunas não sensíveis acessíveis.
o passo 1: Ativar a classificação de dados no catálogo
A Classificação de Dados examina as tabelas em segundo plano e aplica tags governadas pelo sistema class.* , como class.name, class.email_address e class.us_ssn. Não são necessárias tags personalizadas para a detecção em nível de coluna.
- No Explorador de Catálogos, selecione o seu catálogo e acesse a tab Detalhes .
- Ao lado de Classificação de dados , clique em Ativar .
- Opcionalmente, escolha quais esquemas incluir.
A marcação automática é ativada posteriormente, na página de resultados da Classificação de Dados, após a revisão das detecções iniciais (passo 6).
Para obter detalhes completos, consulte Classificação de Dados.
o passo 2: Crie a taggovernada review_status
Crie a seguinte tag controlada na interface do usuário do Explorador de Catálogo ( Catálogo > Controle > Etiquetas controladas > Criar tagcontrolada ):
keyde etiqueta | Valores permitidos |
|---|---|
|
|
Os dados das tags são armazenados como texto simples e podem ser replicados globalmente. Não utilize nomes tag , valores ou descritores que possam comprometer a segurança do seu recurso. Por exemplo, não utilize nomes tag , valores ou descritores que contenham informações pessoais ou sensíveis.
o passo 3: Construir o esquema e aplicar a tagde controle
Crie um esquema e defina a tag de controle como pending. Todas as tabelas criadas neste esquema herdam esta tag automaticamente.
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
CREATE SCHEMA IF NOT EXISTS secure_default;
ALTER SCHEMA abac_tutorial.secure_default
SET TAGS ('review_status' = 'pending');
o passo 4: Criar a política de revisão pendente
Quando uma tabela tem review_status = pending, todas as colunas são mascaradas. MATCH COLUMNS TRUE corresponde a todas as colunas, independentemente das tags.
system.data_classification.mask_value é uma função de mascaramento com reconhecimento de tipo fornecida pelo Databricks. Retorna um marcador de posição seguro com base no tipo de dados em tempo de execução. Por exemplo, retorna 0 para números inteiros, DATE '1970-01-01' para datas e um hash SHA-256 para strings. Não é necessário nenhum UDF personalizado.
CREATE POLICY review_pending_policy
ON SCHEMA abac_tutorial.secure_default
COLUMN MASK system.data_classification.mask_value
TO `account users`
FOR TABLES
WHEN has_tag_value('review_status', 'pending')
MATCH COLUMNS TRUE AS m ON COLUMN m;
Para isentar grupos específicos da política, adicione uma cláusula EXCEPT . Por exemplo, TO \usuáriosaccount EXCETO `data_admins`lets members of thegrupo data_admins` ignora a máscara e vê os dados não mascarados.
o passo 5: Criar uma tabela e verificar o bloqueio
Crie uma tabela no esquema. Ele herda review_status = pending do esquema, portanto todas as colunas são mascaradas imediatamente.
CREATE OR REPLACE TABLE abac_tutorial.secure_default.employee_directory (
id INT,
full_name STRING,
personal_email STRING,
ssn_number STRING,
phone STRING,
office_location STRING,
title STRING,
team STRING
);
INSERT INTO abac_tutorial.secure_default.employee_directory VALUES
(1, 'Alice Johnson', 'alice.j@gmail.com', '123-45-6789', '555-0101', 'NYC HQ Floor 12', 'Staff Engineer', 'Platform'),
(2, 'Bob Smith', 'bob.smith@yahoo.com', '234-56-7890', '555-0202', 'LA Office Suite 4', 'Sales Director', 'Enterprise'),
(3, 'Carol White', 'carol.w@outlook.com', '345-67-8901', '555-0303', 'Chicago Rm 301', 'Senior Engineer', 'Platform'),
(4, 'David Lee', 'david.lee@gmail.com', '456-78-9012', '555-0404', 'Houston Floor 2', 'Marketing Lead', 'Growth'),
(5, 'Eva Martinez', 'eva.m@hotmail.com', '567-89-0123', '555-0505', 'Phoenix Building B', 'HR Business Partner', 'People');
Execute a seguinte consulta para confirmar que todas as colunas estão mascaradas.
SELECT * FROM abac_tutorial.secure_default.employee_directory;
Passo 6: Revisar classificações e ativar etiquetas automáticas
Assim que a Classificação de Dados analisar a tabela (dentro de 24 horas após a sua ativação), revise as detecções e ative as tags automáticas para que tags class.* sejam aplicadas às detecções existentes e futuras.
- No Explorador de Catálogos, selecione o seu catálogo e acesse a tab Detalhes .
- Ao lado de Classificação de dados , clique em visualizar resultados .
- Analise as detecções e forneça feedback sobre quaisquer erros clicando no ícone Excluir ao lado das detecções incorretas.
- Ative as tags automáticas para as tags de classificação que deseja aplicar. As etiquetas serão preenchidas na próxima verificação (dentro de 24 horas).
Para obter detalhes sobre a interface do usuário de classificação de dados e as tags automáticas, consulte Exibir resultados da classificação e Ativar tags automáticas.
Para este tutorial, execute o seguinte para simular as tags class.* que as tags automáticas aplicariam, para que você possa ver o fluxo de ponta a ponta sem esperar por uma verificação em segundo plano.
-- Simulate Data Classification tags (in production, these are applied automatically)
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN full_name SET TAGS ('class.name' = '');
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN personal_email SET TAGS ('class.email_address' = '');
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN ssn_number SET TAGS ('class.us_ssn' = '');
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN phone SET TAGS ('class.phone_number' = '');
o passo 7: Criar a política revisada
Quando uma tabela é marcada como reviewed, apenas as tags de coluna com tags class.* são mascaradas. As colunas não classificadas tornam-se visíveis.
CREATE POLICY review_complete_policy
ON SCHEMA abac_tutorial.secure_default
COLUMN MASK system.data_classification.mask_value
TO `account users`
FOR TABLES
WHEN has_tag_value('review_status', 'reviewed')
MATCH COLUMNS (
has_tag('class.name')
OR has_tag('class.email_address')
OR has_tag('class.us_ssn')
OR has_tag('class.phone_number')
OR has_tag('class.credit_card')
OR has_tag('class.date_of_birth')
) AS m
ON COLUMN m;
Passo 8: Vire a tag de controle e verifique
Marque a tabela como revisada. A tag de nível de tabela reviewed substitui a tag de nível de esquema herdada pending , portanto a política pendente não se aplica mais e a política revisada entra em vigor.
ALTER TABLE abac_tutorial.secure_default.employee_directory
SET TAGS ('review_status' = 'reviewed');
Execute a seguinte consulta para confirmar a alteração. As colunas com tags class.* (full_name, personal_email, ssn_number, phone) permanecem mascaradas. As colunas não classificadas (id, office_location, title, team) agora estão visíveis.
SELECT * FROM abac_tutorial.secure_default.employee_directory;
o passo 9: Verificar herança automática para novas tabelas
Crie outra tabela no mesmo esquema. Ele herda review_status = pending e é totalmente bloqueado automaticamente. Nenhuma configuração adicional é necessária.
CREATE OR REPLACE TABLE abac_tutorial.secure_default.transaction_log (
txn_id INT, account_holder STRING, amount DOUBLE, txn_date DATE, description STRING
);
INSERT INTO abac_tutorial.secure_default.transaction_log VALUES
(1001, 'Alice Johnson', 2500.00, '2026-01-15', 'Wire transfer'),
(1002, 'Bob Smith', 1800.00, '2026-01-16', 'Direct deposit'),
(1003, 'Carol White', 4200.00, '2026-01-17', 'Invoice payment');
Execute a seguinte consulta para confirmar que a nova tabela está totalmente mascarada. Após a classificação de dados analisá-lo, apenas as colunas de tags class.*permanecem mascaradas depois que você muda para reviewed.
SELECT * FROM abac_tutorial.secure_default.transaction_log;
Limpar
Para remover todos os objetos criados neste tutorial, execute o seguinte comando.
DROP POLICY review_pending_policy ON SCHEMA abac_tutorial.secure_default;
DROP POLICY review_complete_policy ON SCHEMA abac_tutorial.secure_default;
DROP TABLE IF EXISTS abac_tutorial.secure_default.employee_directory;
DROP TABLE IF EXISTS abac_tutorial.secure_default.transaction_log;
DROP SCHEMA IF EXISTS abac_tutorial.secure_default CASCADE;
DROP CATALOG IF EXISTS abac_tutorial;
Para remover a tag review_status , use a interface do usuário do Explorador de Catálogo.