4.2Seguridad a nivel de fila (RLS)
Lo esencial en 30 segundos
- La RLS filtra las filas según el usuario: un rol en Desktop lleva un filtro DAX (p. ej.
[Región] = "Argel"), probado con «Ver como» y luego asignado en el Servicio. - Se filtran las dimensiones (el filtro se propaga a los hechos por la relación) en lugar de los hechos directamente — y siempre se prueba antes de publicar.
- La RLS dinámica: un único rol que filtra mediante
USERPRINCIPALNAME()y una tabla de seguridad (correo → ámbito) — el estándar pro, en lugar de un rol por persona.
Mini-caso hilado — Zineb abre el informe a los directores regionales
Zineb, controladora de gestión en una pyme agroalimentaria de Argel, publica un único informe de ventas para tres directores regionales — pero cada uno solo debe ver su región, porque las cifras por sector son confidenciales. Aplica el método: en Modelado → Administrar roles, crea «Región Argel» con el filtro DAX [Región] = "Argel" aplicado sobre la dimensión Región. Lo prueba con «Ver como»: todo el informe se restringe a Argel. Luego prepara la industrialización: una tabla Seguridad (Email, Región) vinculada a la dimensión, y un rol «Dinámico» cuyo filtro es Seguridad[Email] = USERPRINCIPALNAME(). Anota el hito: la asignación real de los usuarios se hará en el Servicio (nivel 5).
Caso autónomo de esta sección: vuelve en el curso, el esquema, el guion y el reto 48 h de la sección 4.2.
1. Un informe, varias lecturas
Un mismo informe, lecturas distintas: el director de Argel solo ve Argel, la directora general lo ve todo. Es la seguridad a nivel de fila (RLS): roles definidos en Desktop (Modelado → Administrar roles) que llevan filtros DAX como [Región] = "Argel". La RLS filtra las filas visibles según el usuario conectado: un informe, ámbitos distintos. Zineb define por tanto un rol por ámbito.
2. Filtrar las dimensiones, probar siempre
El filtro se coloca sobre las dimensiones (Región, Ciudad): por la relación, se propaga a las tablas de hechos — más fiable que filtrar los hechos directamente. Y siempre se prueba con «Ver como» (Modelado): se ve el informe con los ojos de un rol antes de publicar. Zineb simula «Región Argel» y comprueba que nada se desborda.
3. La RLS dinámica
Crear un rol por persona no escala. La versión dinámica industrializa: una tabla de seguridad (Email → Región) vinculada a la dimensión, y un único rol cuyo filtro es Seguridad[Email] = USERPRINCIPALNAME(). Cada usuario solo ve entonces su ámbito, sin rol dedicado. Zineb fija este estándar — es también el reflejo esperado en la PL-300.
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — El rol dinámico
Zineb hace que todos los ámbitos quepan en un solo rol:
Tabla Seguridad (Email, Región) vinculada a la dimensión Región.
Rol «Dinámico», filtro en Seguridad:
Seguridad[Email] = USERPRINCIPALNAME()
→ cada usuario solo ve su ámbito, sin rol dedicado.
Lectura: un solo rol basta para todos — la tabla de seguridad lleva la correspondencia correo → región.
Lección: probar con «Ver como» especificando un correo de la tabla: el ámbito sigue a la identidad.
Vocabulario de la sección
- RLS (Row-Level Security)
- Filtrar las FILAS visibles según el usuario conectado: un informe, ámbitos de datos distintos.
Ejemplo sencillo: Zineb restringe el informe a la región de cada director.
Lo que no es: compartir un informe donde todos ven todo.
Reflejo: datos confidenciales → RLS.
- Rol
- Un conjunto de filtros DAX con nombre (Modelado → Administrar roles): «Región Argel» = [Región]="Argel".
Ejemplo sencillo: Zineb crea un rol por ámbito y luego un rol dinámico.
Lo que no es: un filtro puesto a mano en un solo visual.
Reflejo: rol = filtro DAX con nombre y reutilizable.
- Ver como
- La prueba en Desktop (Modelado → Ver como): ver el informe con los ojos de un rol antes de publicar.
Ejemplo sencillo: Zineb simula «Región Argel» y solo ve Argel.
Lo que no es: probar con su propia cuenta de autora.
Reflejo: la RLS se prueba, siempre, antes de publicar.
- USERPRINCIPALNAME()
- La función que devuelve el correo del usuario conectado: la clave de la RLS dinámica.
Ejemplo sencillo: Zineb la usa para filtrar las filas según la identidad.
Lo que no es: un filtro fijado a un solo valor.
Reflejo: RLS dinámica → USERPRINCIPALNAME().
- Tabla de seguridad
- La tabla de correspondencia correo → ámbito (región, ciudad…) que un único rol dinámico atraviesa para filtrar.
Ejemplo sencillo: Zineb lista en ella Email y Región para sus directores regionales.
Lo que no es: un rol dedicado por persona.
Reflejo: un rol dinámico + una tabla de seguridad.
En la práctica — En la práctica — Del rol estático a la RLS dinámica
- Modelado → Administrar roles → Nuevo: «Región Argel» con el filtro DAX [Región] = "Argel" (sobre la dimensión Región — la mejor opción).
- Pruebe: Modelado → Ver como → marque el rol: todo el informe se restringe a Argel. Salga del modo de prueba.
- Versión dinámica: cree una tabla Seguridad (Email, Región) con 2-3 filas, vincúlela a la dimensión Región y luego un rol «Dinámico» filtrado por Seguridad[Email] = USERPRINCIPALNAME().
- Pruebe de nuevo con «Ver como» especificando un correo de la tabla: el ámbito sigue a la identidad. (La asignación real de los usuarios se hace en el Servicio — nivel 5.)
Guion paso a paso — asegurar el informe como Zineb (8 min)
1) Modelado → Administrar roles → Nuevo, nombre «Región Argel», seleccione la dimensión Región y escriba el filtro DAX [Región] = "Argel". 2) Modelado → Ver como → marque el rol: todo el informe se limita a Argel; desmarque para volver. 3) Cree una tabla Seguridad (Email, Región) de 2-3 filas y vincule Región a la dimensión Región. 4) Rol «Dinámico»: filtro Seguridad[Email] = USERPRINCIPALNAME(). 5) Pruebe con «Ver como» introduciendo un correo de la tabla: el ámbito sigue a la identidad. La asignación de los usuarios se hará en el Servicio.
Si la prueba no cambia nada, compruebe el sentido de la relación y que el filtro se aplica bien a la DIMENSIÓN (el filtro se propaga a los hechos).
Plantilla copiar y pegar — mi lista de verificación de RLS
Roles: Modelado → Administrar roles → Nuevo
Filtro estático: [Región] = "Argel" (sobre la DIMENSIÓN, no los hechos)
Probar: Modelado → Ver como (nunca con su propia cuenta)
Dinámica: tabla Seguridad (Email, Región) + rol filtrado por
Seguridad[Email] = USERPRINCIPALNAME()
Asignación de los usuarios: en el Servicio (nivel 5).
Por región
Zineb crea un rol «Región Argel»: el director de Argel solo ve su región.
Prueba «Ver como»
Zineb simula cada rol antes de publicar: ningún ámbito se desborda.
Un rol para todos
Zineb sustituye los roles por persona por un rol dinámico USERPRINCIPALNAME().
Dimensiones primero
Zineb filtra la dimensión Región: el filtro se propaga a las ventas por la relación.
✓ Buenas prácticas
- Filtrar las dimensiones (el filtro se propaga a los hechos por la relación).
- Probar con «Ver como» antes de cualquier publicación.
- Preferir la RLS dinámica (USERPRINCIPALNAME + tabla de seguridad).
✗ Errores frecuentes
- Filtrar directamente los hechos en lugar de las dimensiones.
- Publicar una RLS sin haberla probado.
- Crear un rol por persona (ingobernable; preferir el dinámico).
Puntos clave
- La RLS filtra los datos por usuario: un informe único, visiones múltiples.
- Filtre las DIMENSIONES en lugar de los hechos directamente.
- «Ver como» antes de cualquier publicación: la RLS se prueba, siempre.
- La RLS dinámica (USERPRINCIPALNAME + tabla de seguridad) evita un rol por persona.
Reto 48 h — aplícalo mañana
Como Zineb, cree un rol RLS en un informe (p. ej. [Región] = "Argel"), pruébelo con «Ver como» y luego monte la tabla de seguridad + el rol dinámico (USERPRINCIPALNAME). Escriba en una frase quién debe ver qué en su organización.
- Puedo crear un rol RLS con un filtro DAX y probarlo («Ver como»).
- Filtro las dimensiones y sé por qué.
- Sé montar una RLS dinámica con USERPRINCIPALNAME y una tabla de seguridad.
Preguntas frecuentes
¿La RLS se me aplica también a mí, el autor?
En Desktop, no (salvo en modo de prueba): usted lo ve todo. En el Servicio, los administradores y miembros del espacio de trabajo no están sujetos a la RLS — juega para los lectores. No concluya por tanto que «no funciona» al probarla con su propia cuenta.
¿La RLS protege contra la exportación de datos?
Sí para el ámbito: un lector limitado a Argel solo exporta las filas de Argel. Pero no sustituye los permisos de acceso al informe (quién puede abrirlo): las dos capas se complementan.
¿Qué función es la clave de la RLS dinámica?