Partilhar via


CRIAR POLÍTICA

Aplica-se a:marcar marcado sim Databricks SQL verificação marcada sim Databricks Runtime 16.4 e superior marcar sim Unity Catalog apenas

Cria uma apólice nomeada sobre um segurável. As políticas podem ser filtros de linha ou máscaras de coluna aplicadas a catálogos, esquemas ou tabelas. O nome da apólice é atribuído ao seguro onde a apólice está definida.

Para executar esta declaração, deve ter o MANAGE privilégio sobre o seguro alvo ou ser o seu proprietário.

Sintaxe

CREATE [ OR REPLACE ] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[ COMMENT description ]
{ row_filter_body | column_mask_body }

row_filter_body
  ROW FILTER function_name
  TO principal [, ...]
  [ EXCEPT principal [, ...] ]
  FOR TABLES
  [ WHEN condition ]
  [ MATCH COLUMNS condition [ [ AS ] alias ] [, ...] ]
  [ USING COLUMNS ( function_arg [, ...] ) ]

column_mask_body
  COLUMN MASK function_name
  TO principal [, ...]
  [ EXCEPT principal [, ...] ]
  FOR TABLES
  [ WHEN condition ]
  [ MATCH COLUMNS condition [ [ AS ] alias ] [, ...] ]
  ON COLUMN alias
  [ USING COLUMNS ( function_arg [, ...] ) ]

Parâmetros

  • policy_name

    Nome da política. O nome é atribuído ao seguro sobre o qual a apólice está definida. Se uma política com o mesmo nome já existir e OR REPLACE não for especificada, o Azure Databricks levanta POLICY_ALREADY_EXISTS.

  • catalog_name

    O nome do catálogo em que a política está definida. Se o tipo securable não for suportado para políticas, o Azure Databricks levanta POLICY_ON_SECURABLE_TYPE_NOT_SUPPORTED.

  • schema_name

    O nome do esquema em que a política está definida.

  • table_name

    O nome da tabela onde a apólice está definida.

  • descrição

    Um comentário opcional de string para a política.

  • function_name

    O nome do UDF usado para o filtro de linha ou máscara de coluna.

  • principal

    Um nome de utilizador, grupo ou principal de serviço. Podem ser listados múltiplos princípios após TO. Os principais indicados a seguir EXCEPT estão excluídos da apólice.

  • condição

    Para WHEN: uma expressão booleana que corresponde aos securáveis (por exemplo, condições de etiqueta ao nível da tabela). Para MATCH COLUMNS: uma expressão booleana que corresponde a colunas (por exemplo, has_tag('tag_name')). As condições são avaliadas pelo plano de controlo sobre metadados securáveis. As únicas funções dirigidas ao utilizador suportadas em condições são has_tag(), has_tag_value(), has_column_tag(), e has_column_tag_value(). As formas mais antigas camelCase (hasTag, hasTagValue, hasColumnTag, hasColumnTagValue) continuam a funcionar para compatibilidade retroativa. Se a condição for inválida, o Azure Databricks levanta UC_INVALID_POLICY_CONDITION.

  • alias

    Em MATCH COLUMNS, um identificador opcional para a coluna correspondente. O alias pode ser referenciado em USING COLUMNS (filtro de linha) ou em ON COLUMN e USING COLUMNS (máscara de coluna).

  • function_arg

    Em USING COLUMNS, cada argumento é ou uma expressão constante ou um alias de MATCH COLUMNS. Os argumentos são encaminhados para a função de política por ordem. Se as opções não corresponderem ao tipo de política, o Azure Databricks levanta UC_POLICY_TYPE_OPTIONS_MISMATCH.

Exemplos

O exemplo seguinte cria uma política de coluna de máscara:

> CREATE FUNCTION ssn_to_last_nr (ssn STRING, nr INT) RETURNS STRING
    RETURN right(ssn, nr);

> CREATE POLICY ssn_mask
    ON CATALOG employees
    COLUMN MASK ssn_to_last_nr
    TO 'All Users' EXCEPT 'HR admins'
    FOR TABLES
    MATCH COLUMNS has_tag('ssn') AS ssn
    ON COLUMN ssn
    USING COLUMNS (4);

O exemplo seguinte cria uma política de filtro de linhas:

> CREATE FUNCTION non_eu_region (geo_region STRING) RETURNS BOOLEAN
    RETURN geo_region <> 'eu';

> CREATE POLICY hide_eu_customers
    ON SCHEMA prod.customers
    COMMENT 'Hide European customers from sensitive tables'
    ROW FILTER non_eu_region
    TO analysts
    FOR TABLES
    WHEN has_tag_value('sensitivity', 'high')
    MATCH COLUMNS has_tag('geo_region') AS region
    USING COLUMNS (region);