ALTER ROW ACCESS POLICY

Modifie les propriétés d’une politique d’accès aux lignes existante, notamment en renommant la politique ou en remplaçant les règles de la politique.

Toutes les modifications apportées aux règles de politiques entrent en vigueur lors de l’exécution de la prochaine requête SQL qui utilise la politique d’accès aux lignes.

Voir aussi :

Politique d’accès aux lignes DDL

Syntaxe

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name>

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> UNSET COMMENT
Copy

Paramètres

name

Identificateur de la politique d’accès aux lignes ; doit être unique dans le schéma parent de la politique.

La valeur de l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

RENAME TO new_name

Spécifie le nouvel identificateur de la politique d’accès aux lignes ; doit être unique pour votre schéma. Le nouvel identificateur ne peut pas être utilisé si l’identificateur est déjà en place pour une politique d’accès aux lignes différente.

Pour plus de détails, voir Exigences relatives à l’identificateur.

Vous pouvez déplacer l’objet vers une autre base de données et/ou un autre schéma tout en renommant éventuellement l’objet. Pour ce faire, spécifiez une valeur new_name qualifiée qui inclut le nouveau nom de la base de données et/ou du schéma sous la forme db_name.schema_name.object_name ou schema_name.object_name, respectivement.

Note

  • La base de données et/ou le schéma de destination doivent déjà exister. En outre, un objet portant le même nom ne peut pas déjà exister dans le nouvel emplacement ; sinon, l’instruction renvoie une erreur.

  • Le déplacement d’un objet vers un schéma d’accès géré est interdit sauf si le propriétaire de l’objet (c’est-à-dire le rôle qui a le privilège OWNERSHIP sur l’objet) est également propriétaire du schéma cible.

SET ...

Spécifie une (ou plusieurs) propriété(s) à définir pour la politique d’accès aux lignes :

BODY -> expression_on_arg_name

Expression SQL qui filtre les données.

L’expression peut inclure Fonctions d’expressions conditionnelles pour représenter la logique conditionnelle, les fonctions intégrées ou les UDFs pour transformer les données.

Si une fonction UDF ou externe est utilisée dans le corps de la politique d’accès aux lignes, le propriétaire de la politique doit avoir OWNERSHIP sur l’UDF ou la fonction externe. Les utilisateurs interrogeant un objet de base de données auquel une politique d’accès aux lignes est appliquée n’ont pas besoin d’avoir USAGE sur l’UDF ou sur la fonction externe.

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

Spécifie le nom de la balise et la valeur de la chaîne de la balise.

La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.

Pour plus d’informations sur la spécification des balises dans une instruction, voir Quotas de balises pour les objets et les colonnes.

COMMENT = 'string_literal'

Ajoute un commentaire ou écrase le commentaire existant pour la politique de masquage.

Par défaut : aucune valeur

UNSET ...

Spécifie une (ou plusieurs) propriété(s) et/ou paramètres à désactiver pour la politique de masquage, qui les réinitialise aux valeurs par défaut :

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

Lors de la réinitialisation d’une propriété ou d’un paramètre, spécifiez seulement le nom ; si vous spécifiez une valeur pour la propriété, vous obtiendrez une erreur.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :

Privilège

Objet

Remarques

OWNERSHIP

Politique d’accès aux lignes

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Pour plus de détails sur la DDL de politique d’accès aux lignes et les privilèges, voir Gérez les politiques d’accès aux lignes.

Notes sur l’utilisation

  • Si vous souhaitez mettre à jour une politique d’accès aux lignes existante et si vous avez besoin de voir la définition actuelle de cette politique, appelez la fonction GET_DDL ou exécutez la commande DESCRIBE ROW ACCESS POLICY .

  • Vous ne pouvez pas modifier la signature de la politique (par exemple, le nom de l’argument ou le type de données d’entrée/de sortie). De même, l’utilisation de CREATE OR REPLACE ROW ACCESS POLICY n’est pas prise en charge si la politique est attachée à une table ou à une vue. Si vous devez modifier la signature, exécutez une instruction DROP ROW ACCESS POLICY sur la politique et créez une nouvelle politique d’accès aux lignes.

  • Avant d’exécuter une instruction ALTER, vous pouvez exécuter une instruction DESCRIBE ROW ACCESS POLICY pour déterminer le nom d’argument à utiliser pour mettre à jour la politique.

  • L’inclusion d’une ou plusieurs sous-requêtes dans le corps de la politique peut provoquer des erreurs. Dans la mesure du possible, limitez le nombre de sous-requêtes, limitez le nombre d’opérations JOIN et simplifiez les conditions des clauses WHERE.

  • Si la politique body contient une consultation de table de mappage, créez une table de mappage centralisée et stockez-la dans la même base de données que la table protégée. Ceci est particulièrement important si body appelle la fonction IS_DATABASE_ROLE_IN_SESSION. Pour plus de détails, voir les notes sur l’utilisation de la fonction.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Exemples

L’exemple suivant met à jour la politique d’accès aux lignes.

DESC ROW ACCESS POLICY rap_table_employee_info;
Copy
+-------------------------+-------------+-------------+------+
| name                    | signature   | return_type | body |
+-------------------------+-------------+-------------+------+
| rap_table_employee_info | (V VARCHAR) | BOOLEAN     | true |
+-------------------------+-------------+-------------+------+
ALTER ROW ACCESS POLICY rap_table_employee_info SET BODY -> false;
Copy