Lección complementaria: Implementar la seguridad dinámica mediante filtros de fila
Se aplica a:
SQL Server 2016 y versiones posteriores Analysis Services
Azure Analysis Services
Power BI Premium
En esta lección complementaria, creará un rol adicional que implemente seguridad dinámica. La seguridad dinámica proporciona seguridad de nivel de fila en función del identificador de inicio de sesión o del nombre de usuario de la persona que tenga la sesión iniciada. Para obtener más información, consulte Roles.
Para implementar la seguridad dinámica, debe agregar una tabla al modelo que contiene los nombres de usuario de Windows de los usuarios que pueden crear una conexión al modelo como un origen de datos y examinar los objetos y datos del modelo. El modelo que se crea con este tutorial está en el contexto de Adventure Works Corp.; sin embargo, para completar esta lección, debe agregar una tabla que contenga usuarios de su propio dominio. No necesitará contraseñas para los nombres de usuario que se van a agregar. Para crear una tabla EmployeeSecurity, con un pequeño ejemplo de usuarios de su propio dominio, usará la característica Pegar y pegará los datos de los empleados de una hoja de Excel trabajo. En un escenario real, la tabla que contiene los nombres de usuario que agrega a un modelo utilizaría normalmente una tabla de una base de datos real como origen de datos; por ejemplo, una tabla dimEmployee real.
Para implementar la seguridad dinámica, usará dos nuevas funciones de DAX: función USERNAME (DAX) y función LOOKUPVALUE (DAX). Estas funciones, aplicadas en una fórmula de filtro de fila, se definen en un nuevo rol. Con la función LOOKUPVALUE, la fórmula especifica un valor de la tabla EmployeeSecurity y, luego, pasa ese valor a la función USERNAME, que especifica el nombre de usuario de la persona que ha iniciado sesión y que pertenece a este rol. A continuación, el usuario solo puede examinar los datos especificados por los filtros de fila del rol. En este escenario, especificará que los empleados de ventas solo podrán examinar los datos de ventas por Internet de los territorios de ventas de los que son miembros.
Para completar esta lección complementaria, realizará una serie de tareas. Las tareas que solo se realizan en este escenario de modelo tabular de Adventure Works, pero no que se aplicarían necesariamente a un escenario real, se identifican como tales. Cada tarea incluye información adicional que describe el propósito de la tarea.
Tiempo estimado para completar esta lección: 30 minutos
Requisitos previos
Este tema de la lección complementaria forma parte de un tutorial de modelado tabular, que debe completar en orden. Antes de realizar las tareas de esta lección complementaria, debe haber completado todas las lecciones anteriores.
Incorporación de la tabla DimSalesTerritory al proyecto de modelo tabular de AW Internet Sales
Para implementar la seguridad dinámica en este escenario de ejemplo Adventure Works, debe agregar dos tablas adicionales al modelo. La primera tabla que agregará es dimSalesTerritory (como Sales Territory) procedente de la misma base de datos AdventureWorksDW. Más adelante aplicará un filtro de fila a la tabla SalesTerritory que define los datos concretos que el usuario que ha iniciado sesión puede examinar.
Procedimiento para agregar la tabla DimSalesTerritory
En SSDT, haga clic en el menú Modelo y, a continuación, haga clic en Conexiones existentes.
En el cuadro de diálogo Conexiones existentes , compruebe que esté seleccionada la conexión al origen de datos BD de Adventure Works de SQL y haga clic en Abrir.
Si aparece el cuadro de diálogo Credenciales de suplantación, escriba las credenciales de suplantación que usó en la lección 2 sobre incorporación de datos.
En la página Elegir cómo importar los datos , deje seleccionada la opción Seleccionar en una lista de tablas y vistas para elegir los datos a importar y haga clic en Siguiente.
En la página Seleccionar tablas y vistas , seleccione la tabla DimSalesTerritory .
Haga clic en Vista previa y filtro.
Anule la selección de la columna SalesTerritoryAlternateKey y haga clic en Aceptar.
En la página Seleccionar tablas y vistas , haga clic en Finalizar.
Las nueva tabla se agregarán al final del área de trabajo del modelo. Los objetos y datos de la tabla de origen DimSalesTerritory se importan luego en el modelo tabular de ventas de AW Internet Sales.
Una vez importada la tabla, haga clic en Cerrar.
Incorporación de una tabla con datos de nombres de usuario
Dado que la tabla DimEmployee de la base de datos de ejemplo AdventureWorksDW contiene usuarios del dominio AdventureWorks, y que esos nombres de usuario no existen en su propio entorno, debe crear una tabla en el modelo que contenga una pequeña muestra (tres) de usuarios reales de su organización. Agregará después estos usuarios al nuevo rol como miembros. No necesita las contraseñas de los nombres de usuario de ejemplo, pero necesitará nombres de usuario de Windows reales de su propio dominio.
Procedimiento para agregar una tabla EmployeeSecurity
Abra Microsoft Excel para crear una hoja de cálculo.
Copie la siguiente tabla, incluida la fila de encabezado y, luego, péguela en la hoja de cálculo.
|EmployeeId|SalesTerritoryId|FirstName|LastName|LoginId| |---------------|----------------------|--------------|-------------|------------| |1|2|<user first name>|<user last name>|\<domain\username>| |1|3|<user first name>|<user last name>|\<domain\username>| |2|4|<user first name>|<user last name>|\<domain\username>| |3|5|<user first name>|<user last name>|\<domain\username>|Reemplace el nombre, los apellidos y dominio\nombre de usuario por los nombres e identificadores de inicio de sesión de tres usuarios de su organización. Coloque el mismo usuario en las dos primeras filas de EmployeeId 1. Esto mostrará que este usuario pertenece a más de un territorio de ventas. Deje los campos EmployeeId y SalesTerritoryId tal y como están.
Guarde la hoja de cálculo como SampleEmployee.
En la hoja de cálculo, seleccione todas las celdas con datos de empleado, incluidos los encabezados, haga clic con el botón derecho en los datos seleccionados y, a continuación, haga clic en Copiar.
En SSDT, haga clic en el menú Editar y, luego, en Pegar.
Si la opción Pegar está atenuada, haga clic en una columna de cualquier tabla en la ventana del Diseñador de modelos e inténtelo de nuevo.
En el cuadro de diálogo Vista previa de pegado, en Nombre de la tabla, escriba EmployeeSecurity.
En Datos que se pegarán, compruebe que los datos incluyen todos los datos de usuario y los encabezados de la hoja de cálculo SampleEmployee.
Compruebe que la casilla Usar primera fila como encabezados de columna está activada y, luego, haga clic en Aceptar.
Se creará una nueva tabla denominada "EmployeeSecurity" con datos de empleados copiados de la hoja de cálculo SampleEmployee.
Creación de relaciones entre las tablas FactInternetSales, DimGeography y DimSalesTerritory
Las tablas FactInternetSales, DimGeography y DimSalesTerritory contienen una columna común SalesTerritoryId. La columna SalesTerritoryId de la tabla DimSalesTerritory contiene valores con un identificador distinto para cada territorio de ventas.
Procedimiento para crear relaciones entre las tablas FactInternetSales, DimGeography y DimSalesTerritory
En el diseñador de modelos, en la Vista de diagrama, en la tabla DimGeography , haga clic y mantenga presionada la columna SalesTerritoryId , arrastre el cursor a la columna SalesTerritoryId de la tabla DimSalesTerritory y, a continuación, suelte .
En la tabla FactInternetSales , haga clic y mantenga presionada la columna SalesTerritoryId , arrastre el cursor a la columna SalesTerritoryId de la tabla DimSalesTerritory y, a continuación, suelte .
Observe que la propiedad Active de esta relación es False, lo que significa que está inactiva. Esto se debe a que la tabla FactInternetSales ya tiene otra relación activa que se usa en las medidas.
Ocultación de la tabla EmployeeSecurity de las aplicaciones cliente
En esta tarea, ocultará la tabla EmployeeSecurity, lo que evitará que aparezca en la lista de campos de una aplicación cliente. Tenga en cuenta que ocultar una tabla no significa protegerla. Los usuarios todavía pueden consultar datos de la tabla EmployeeSecurity, si saben cómo. Para proteger los datos de la tabla EmployeeSecurity, lo que impide que los usuarios puedan consultar cualquiera de sus datos, aplicará un filtro en una tarea posterior.
Procedimiento para ocultar la tabla EmployeeSecurity de las aplicaciones cliente
- En el Diseñador de modelos, en la vista de diagrama, haga clic con el botón derecho en el encabezado de tabla Empleado y, luego, haga clic en Ocultar en herramientas cliente.
Creación de un rol de usuario Empleados de ventas por territorio
En esta tarea, creará un rol de usuario. Este rol incluirá un filtro de fila que define qué filas de la tabla DimSalesTerritory son visibles para los usuarios. Después, se aplica el filtro en la dirección de la relación de uno a muchos a todas las demás tablas relacionadas con DimSalesTerritory. También aplicará un filtro simple que protege toda la tabla EmployeeSecurity de ser consultada por cualquier usuario que sea miembro del rol.
Nota
El rol Empleados de ventas por territorio que creará en esta lección permitirá a los miembros examinar (o consultar) solo los datos de ventas del territorio de ventas al que pertenecen. Si agrega un usuario como miembro al rol Empleados de ventas por territorio que también existe como miembro en un rol creado en la Lección 11: Crear roles, se obtiene una combinación de permisos. Cuando un usuario es miembro de varios roles, los permisos y filtros de fila definidos para cada rol son acumulativos. Es decir, el usuario tendrá los mayores permisos determinados por la combinación de roles.
Procedimiento para crear un rol de usuario Empleados de ventas por territorio
En SSDT, haga clic en el menú Modelo y en Roles.
En Administrador de roles, haga clic en Nuevo.
Se agrega a la lista un nuevo rol con el permiso Ninguno.
Haga clic en el nuevo rol y, en la columna Nombre , cambie el nombre del rol a Empleados de ventas por territorio.
En la columna Permisos, haga clic en la lista desplegable y, luego, seleccione el permiso Lectura.
Haga clic en la pestaña Miembros y luego en Agregar.
En el cuadro de diálogo Seleccionar usuario o grupo de la opción para escribir el nombre del objeto que se seleccionará, escriba el primer nombre de usuario de ejemplo que utilizó al crear la tabla EmployeeSecurity. Haga clic en Comprobar nombres para comprobar que el nombre de usuario es válido y, luego, haga clic en Aceptar.
Repita este paso agregando los demás nombres de usuario de ejemplo que utilizó al crear la tabla EmployeeSecurity.
Haga clic en la pestaña Filtros de fila .
En la tabla EmployeeSecurity , en la columna Filtro DAX , escriba la fórmula siguiente.
=FALSE()Esta fórmula especifica que todas las columnas se resuelvan en la condición booleana falsa; por lo tanto, no se puede consultar ninguna columna de la tabla EmployeeSecurity por un miembro del rol de usuario Empleados de ventas por territorio.
Para la tabla DimSalesTerritory , escriba la siguiente fórmula.
='Sales Territory'[Sales Territory Id]=LOOKUPVALUE('Employee Security'[Sales Territory Id], 'Employee Security'[Login Id], USERNAME(), 'Employee Security'[Sales Territory Id], 'Sales Territory'[Sales Territory Id])En esta fórmula, la función LOOKUPVALUE devuelve todos los valores de la columna DimEmployeeSecurity[SalesTerritoryId], donde el valor de EmployeeSecurity[LoginId] es el mismo que el nombre de usuario de Windows que tiene la sesión iniciada, y el de EmployeeSecurity[SalesTerritoryId] es el mismo que el de DimSalesTerritory[SalesTerritoryId].
El conjunto de identificadores del territorio de ventas que se devuelven mediante LOOKUPVALUE se usa para restringir las filas que se muestran en la tabla DimSalesTerritory. Solo se muestran las filas donde se encuentra el valor de SalesTerritoryID para la fila del conjunto de identificadores devueltos mediante la función LOOKUPVALUE.
En el Administrador de roles, haga clic en Aceptar.
Prueba del rol de usuario Empleados de ventas por territorio
En esta tarea, usará la característica Analizar en Excel SSDT para probar la eficacia del rol de usuario Empleados de ventas por territorio. Especificará uno de los nombres de usuario que agregó a la tabla EmployeeSecurity y como miembro del rol. Este nombre de usuario se utilizará como el nombre de usuario efectivo en la conexión creada entre Excel y el modelo.
Procedimiento para probar el rol de usuario Empleados de ventas por territorio
En SSDT, haga clic en el menú Modelo y en Analizar en Excel.
En el cuadro de diálogo Analizar en Excel, en Especifique el nombre de usuario o rol que se va a usar al conectarse al modelo, seleccione Otro usuario de Windows. Después, haga clic en Examinar.
En el cuadro de diálogo Seleccionar usuario o grupo de la opción para escribir el nombre del objeto que se seleccionará, escriba uno de los nombres de usuario que incluyó en la tabla EmployeeSecurity. Después, haga clic en Comprobar nombres.
Haga clic en Aceptar para cerrar el Seleccionar usuario o grupo cuadro de diálogo y, a continuación, haga clic en Aceptar para cerrar el analizar en Excel cuadro de diálogo.
Se abrirá Excel con un nuevo libro. Automáticamente se crea una tabla dinámica. La lista PivotTable Fields incluye la mayoría de los campos de datos disponibles en el nuevo modelo.
Observe que la tabla EmployeeSecurity no está visible en la lista de campos de la tabla dinámica. Esto se debe a que eligió ocultar esta tabla de las herramientas cliente en una tarea anterior.
En la lista Campos de Ventas por Internet de ∑ (medidas), seleccione la medida InternetTotalSales. La medida se agregará a los campos Valores .
Seleccione la columna SalesTerritoryId desde la tabla DimSalesTerritory. La columna se agregará a los campos Etiquetas de fila .
Tenga en cuenta que las cifras de ventas por Internet solo aparecen para la región a la que pertenece el nombre de usuario efectivo que usó. Si selecciona otra columna, por ejemplo, City, de la tabla DimGeography como campo de etiqueta de fila, solo se mostrarán las ciudades del territorio de ventas al que pertenece el usuario efectivo.
Este usuario no podrá examinar o consultar los datos de ventas por Internet para otros territorios distintos de aquel al que pertenece, porque el filtro de fila definido para la tabla Sales Territory en el rol de usuario de empleados de ventas por territorio protege eficazmente los datos relacionados con otros territorios de ventas.
Consulte también
Función USERNAME (DAX)
LOOKUPVALUE, función (DAX)
Función CUSTOMDATA (DAX)