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

> Documentación de la política de enmascaramiento

# 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>
            {'ClickHouse Cloud only'}
        </div>;
};

Crea una política de enmascaramiento, que permite transformar o enmascarar dinámicamente los valores de las columnas para usuarios o roles específicos cuando consultan una tabla.

<Tip>
  Las políticas de enmascaramiento proporcionan seguridad de los datos a nivel de columna al transformar datos sensibles en tiempo de consulta sin modificar los datos almacenados.
</Tip>

Sintaxis:

```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">
  ## Cláusula UPDATE
</div>

La cláusula `UPDATE` especifica qué columnas se deben enmascarar y cómo transformarlas. Se pueden enmascarar varias columnas en una sola política.

Ejemplos:

* Enmascaramiento simple: `UPDATE email = '***masked***'`
* Enmascaramiento parcial: `UPDATE email = concat(substring(email, 1, 3), '***@***.***')`
* Enmascaramiento basado en hash: `UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8))`
* Varias columnas: `UPDATE email = '***@***.***', phone = '***-***-****'`

<div id="where-clause">
  ## Cláusula WHERE
</div>

La cláusula `WHERE` opcional permite aplicar enmascaramiento condicional en función de los valores de las filas. El enmascaramiento solo se aplicará a las filas que cumplan la condición.

Ejemplo:

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

<div id="to-clause">
  ## Cláusula TO
</div>

En la sección `TO`, especifique a qué usuarios y roles debe aplicarse la política.

* `TO user1, user2`: Se aplica a usuarios/roles específicos
* `TO ALL`: Se aplica a todos los usuarios
* `TO ALL EXCEPT user1, user2`: Se aplica a todos los usuarios excepto a los especificados

<Note>
  A diferencia de las políticas de filas, las políticas de enmascaramiento no afectan a los usuarios a los que no se les aplica la política. Si ninguna política de enmascaramiento se aplica a un usuario, este verá los datos originales.
</Note>

<div id="priority-clause">
  ## Cláusula PRIORITY
</div>

Cuando varias políticas de enmascaramiento se aplican a la misma columna para un usuario, la cláusula `PRIORITY` determina el orden de aplicación. Las políticas se aplican por orden de prioridad, de mayor a menor.

La prioridad predeterminada es 0. Las políticas con la misma prioridad se aplican en un orden indefinido.

Ejemplo:

```sql theme={null}
-- Se aplica segunda (prioridad menor)
CREATE MASKING POLICY mask1 ON users
UPDATE email = 'low@priority.com'
TO analyst
PRIORITY 1;

-- Se aplica primera (prioridad mayor)
CREATE MASKING POLICY mask2 ON users
UPDATE email = 'high@priority.com'
TO analyst
PRIORITY 10;

-- analyst ve 'low@priority.com' porque se aplica en último lugar
```

<Info>
  **Consideraciones sobre el rendimiento**

  * Las políticas de enmascaramiento pueden afectar al rendimiento de las consultas según la complejidad de la expresión
  * Algunas optimizaciones pueden deshabilitarse en tablas con políticas de enmascaramiento activas
</Info>
