> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentation de référence pour la politique de masquage

# CREATE MASKING POLICY

export const CloudOnlyBadge = () => {
  return <div className="cloudBadge">
            <div className="cloudIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path fillRule="evenodd" clipRule="evenodd" d="M5.33395 12.6667H12.3739C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00004 12.3739 8.00004H12.0839V7.33337C12.0839 5.12671 10.2906 3.33337 8.08395 3.33337C6.09928 3.33337 4.45395 4.78537 4.14195 6.68204C2.55728 6.76271 1.29395 8.06204 1.29395 9.66671C1.29395 11.3234 2.63728 12.6667 4.29395 12.6667H5.33395Z" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            {'Uniquement sur ClickHouse Cloud'}
        </div>;
};

Crée une politique de masquage, qui permet de transformer ou de masquer dynamiquement les valeurs de colonnes pour des utilisateurs ou des rôles spécifiques lorsqu’ils interrogent une table.

<Tip>
  Les politiques de masquage assurent la sécurité des données au niveau des colonnes en transformant les données sensibles au moment de la requête, sans modifier les données stockées.
</Tip>

Syntaxe :

```sql theme={null}
CREATE MASKING POLICY [IF NOT EXISTS | OR REPLACE] policy_name ON [database.]table
    UPDATE column1 = expression1 [, column2 = expression2 ...]
    [WHERE condition]
    TO {role1 [, role2 ...] | ALL | ALL EXCEPT role1 [, role2 ...]}
    [PRIORITY priority_number]
```

<div id="update-clause">
  ## Clause `UPDATE`
</div>

La clause `UPDATE` précise quelles colonnes masquer et comment les transformer. Vous pouvez masquer plusieurs colonnes dans une même politique.

Exemples :

* Masquage simple : `UPDATE email = '***masked***'`
* Masquage partiel : `UPDATE email = concat(substring(email, 1, 3), '***@***.***')`
* Masquage fondé sur le hachage : `UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8))`
* Plusieurs colonnes : `UPDATE email = '***@***.***', phone = '***-***-****'`

<div id="where-clause">
  ## Clause WHERE
</div>

La clause `WHERE` facultative permet un masquage conditionnel en fonction des valeurs des lignes. Seules les lignes qui satisfont à la condition seront masquées.

Exemple :

```sql theme={null}
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;
```

<div id="to-clause">
  ## Clause TO
</div>

Dans la section `TO`, indiquez à quels utilisateurs et rôles la politique doit s'appliquer.

* `TO user1, user2` : s'applique à des utilisateurs/rôles spécifiques
* `TO ALL` : s'applique à tous les utilisateurs
* `TO ALL EXCEPT user1, user2` : s'applique à tous les utilisateurs sauf ceux spécifiés

<Note>
  Contrairement aux politiques de lignes, les politiques de masquage n'affectent pas les utilisateurs auxquels elles ne s'appliquent pas. Si aucune politique de masquage ne s'applique à un utilisateur, il voit les données d'origine.
</Note>

<div id="priority-clause">
  ## Clause PRIORITY
</div>

Lorsque plusieurs politiques de masquage ciblent la même colonne pour un utilisateur donné, la clause `PRIORITY` détermine l’ordre dans lequel elles sont appliquées. Les politiques sont appliquées de la priorité la plus élevée à la plus faible.

La priorité par défaut est 0. Les politiques ayant la même priorité sont appliquées dans un ordre indéterminé.

Exemple :

```sql theme={null}
-- Applied second (lower priority)
CREATE MASKING POLICY mask1 ON users
UPDATE email = 'low@priority.com'
TO analyst
PRIORITY 1;

-- Applied first (higher priority)
CREATE MASKING POLICY mask2 ON users
UPDATE email = 'high@priority.com'
TO analyst
PRIORITY 10;

-- analyst sees 'low@priority.com' because it's applied last
```

<Info>
  **Considérations relatives aux performances**

  * Les politiques de masquage peuvent affecter les performances des requêtes selon la complexité des expressions
  * Certaines optimisations peuvent être désactivées pour les tables dotées de politiques de masquage actives
</Info>
