Partager via


CREATE POLICY

S’applique à :coche marqué oui Databricks SQL coche marqué oui Databricks Runtime 16.4 et versions ultérieures coche marqué oui Unity Catalog uniquement

Crée une stratégie nommée sur un élément sécurisable. Les stratégies peuvent être des filtres de lignes ou des masques de colonne appliqués aux catalogues, schémas ou tables. Le nom de la stratégie est limité à l’élément sécurisable sur lequel la stratégie est définie.

Pour exécuter cette instruction, vous devez disposer du MANAGE privilège sur la cible sécurisable ou être son propriétaire.

Syntaxe

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 [, ...] ) ]

Paramètres

  • policy_name

    Nom de la stratégie. Le nom est limité à l’élément sécurisable sur lequel la stratégie est définie. Si une stratégie portant le même nom existe déjà et OR REPLACE n’est pas spécifiée, Azure Databricks déclenche POLICY_ALREADY_EXISTS.

  • catalog_name

    Nom du catalogue sur lequel la stratégie est définie. Si le type sécurisable n’est pas pris en charge pour les stratégies, Azure Databricks déclenche POLICY_ON_SECURABLE_TYPE_NOT_SUPPORTED.

  • schema_name

    Nom du schéma sur lequel la stratégie est définie.

  • table_name

    Nom de la table sur laquelle la stratégie est définie.

  • description

    Commentaire de chaîne facultatif pour la stratégie.

  • function_name

    Nom de la fonction UDF utilisée pour le filtre de ligne ou le masque de colonne.

  • principal

    Nom d’utilisateur, de groupe ou de principal de service. Plusieurs principaux peuvent être répertoriés après TO. Les principaux répertoriés après EXCEPT sont exclus de la stratégie.

  • Condition

    Pour WHEN: expression booléenne qui correspond aux éléments sécurisables (par exemple, conditions de balise au niveau de la table). Pour MATCH COLUMNS: expression booléenne qui correspond aux colonnes (par exemple, hasTag('tag_name')). Les conditions sont évaluées par le plan de contrôle sur les métadonnées sécurisables. Les seules fonctions accessibles par l’utilisateur prises en charge dans les conditions sont hasTag() et hasTagValue(). Si la condition n’est pas valide, Azure Databricks déclenche UC_INVALID_POLICY_CONDITION.

  • alias

    Dans MATCH COLUMNS, identificateur facultatif pour la colonne correspondante. L’alias peut être référencé dans USING COLUMNS (filtre de lignes) ou dans ON COLUMN et USING COLUMNS (masque de colonne).

  • function_arg

    Dans USING COLUMNS, chaque argument est une expression constante ou un alias de MATCH COLUMNS. Les arguments sont passés à la fonction de stratégie dans l’ordre. Si les options ne correspondent pas au type de stratégie, Azure Databricks déclenche UC_POLICY_TYPE_OPTIONS_MISMATCH.

Exemples

L’exemple suivant crée une stratégie de masque de colonne :

> 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 hasTag('ssn') AS ssn
    ON COLUMN ssn
    USING COLUMNS (4);

L’exemple suivant crée une stratégie de filtre de lignes :

> 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 hasTagValue('sensitivity', 'high')
    MATCH COLUMNS hasTag('geo_region') AS region
    USING COLUMNS (region);