Seguridad de nivel de fila con Power BI EmbeddedRow-level security with Power BI Embedded

La seguridad de nivel de fila (RLS) se puede usar para restringir el acceso de los usuarios a los datos de paneles, iconos, informes y conjuntos de datos.Row-level security (RLS) can be used to restrict user access to data within dashboards, tiles, reports, and datasets. Varios usuarios diferentes pueden trabajar con esos mismos artefactos mientras ven otros datos distintos.Different users can work with those same artifacts all while seeing different data. La inserción admite RLS.Embedding supports RLS.

Si va a realizar una inserción para usuarios que no son de Power BI (la aplicación posee los datos), que es normalmente un escenario de ISV, este es el artículo que necesita.If you're embedding for non-Power BI users (app owns data), which is typically an ISV scenario, then this article is for you! Configure el token de inserción para tener en cuenta el usuario y el rol.Configure the embed token to account for the user and role.

Si va a realizar la inserción para usuarios de Power BI (el usuario posee los datos), dentro de su organización, RLS funciona igual que dentro del servicio Power BI directamente.If you're embedding to Power BI users (user owns data), within your organization, RLS works the same as it does within the Power BI service directly. No tiene que hacer nada más en la aplicación.There's nothing more you need to do in your application. Para más información, vea Seguridad de nivel de fila (RLS) con Power BI.For more information, see Row-Level security (RLS) with Power BI.

Elementos relacionados con la seguridad de nivel de fila.

Para aprovechar las ventajas de RLS, es importante que comprenda tres conceptos principales: usuarios, roles y reglas.To take advantage of RLS, it's important you understand three main concepts; Users, Roles, and Rules. Ahora se analizarán estos conceptos más detenidamente:Let's take a closer look at these concepts:

Usuarios: los usuarios finales que ven el artefacto (panel, icono, informe o conjunto de datos).Users – End users viewing the artifact (dashboard, tile, report, or dataset). En Power BI Embedded, los usuarios se identifican por la propiedad de nombre de usuario de un token de inserción.In Power BI Embedded, users are identified by the username property in an embed token.

Roles: los usuarios pertenecen a roles.Roles – Users belong to roles. Un rol es un contenedor de reglas y se puede designar algo como Representante de ventas o Rep. de ventas. Los roles se crean en Power BI Desktop.A role is a container for rules and can be named something like Sales Manager or Sales Rep. You create roles within Power BI Desktop. Para más información, consulte Seguridad de nivel de fila (RLS) con Power BI Desktop.For more information, see Row-level security (RLS) with Power BI Desktop.

Reglas: los roles tienen reglas y esas reglas son los filtros reales que se van a aplicar a los datos.Rules – Roles have rules, and those rules are the actual filters that are going to be applied to the data. Las reglas podrían ser algo tan sencillo como "País = EE. UU." o algo mucho más dinámico.The rules could be as simple as "Country = USA" or something much more dynamic. En el resto de este artículo, se incluye un ejemplo de la creación de RLS y su uso dentro de una aplicación insertada.For the rest of this article, there's an example of authoring RLS, and then consuming that within an embedded application. En nuestro ejemplo se usa el archivo PBIX de ejemplo de análisis de minoristas.Our example uses the Retail Analysis Sample PBIX file.

Ejemplo de informe

Adición de roles con Power BI DesktopAdding roles with Power BI Desktop

El ejemplo de análisis de minoristas muestra las ventas de todas las tiendas de una cadena de minoristas.Our Retail Analysis sample shows sales for all the stores in a retail chain. Sin RLS, no importa qué jefe de distrito inicie la sesión y vea el informe, ya que los datos que vea serán los mismos.Without RLS, no matter which district manager signs in and views the report, they all see the same data. La administración senior ha determinado que cada jefe de distrito solo debe ver las ventas de las tiendas que dirige.Senior management has determined each district manager should only see the sales for the stores they manage. El uso de RLS permite a la administración senior restringir los datos según un jefe de distrito.Using RLS allows Senior management to restrict data based on a district manager.

RLS se crea en Power BI Desktop.RLS is authored in Power BI Desktop. Cuando se abren el conjunto de datos y el informe, se puede cambiar a una vista de diagrama para ver el esquema:When the dataset and report are opened, we can switch to diagram view to see the schema:

Vista de diagrama en Power BI Desktop

Estos son algunos aspectos que debe observar con este esquema:Here are a few things to notice with this schema:

  • Todas las medidas, como Total Sales, se almacenan en la tabla de hechos Sales.All measures, like Total Sales, are stored in the Sales fact table.

  • Hay cuatro tablas de dimensiones relacionadas adicionales: Item, Time, Store y District.There are four additional related dimension tables: Item, Time, Store, and District.

  • Las flechas de las líneas de relación indican de qué forma los filtros pueden fluir de una tabla a otra.The arrows on the relationship lines indicate which way filters can flow from one table to another. Por ejemplo, si se coloca un filtro en Time[Date] , en el esquema actual solo se filtrarían los valores de la tabla Sales.For example, if a filter is placed on Time[Date], in the current schema it would only filter down values in the Sales table. Ninguna otra tabla se ve afectada por este filtro ya que todas las flechas de las líneas de relación apuntan a la tabla de ventas y no fuera.No other tables are affected by this filter since all the arrows on the relationship lines point to the sales table and not away.

  • La tabla District indica quién es el jefe de cada distrito:The District table indicates who the manager is for each district:

    Filas dentro de la tabla District

Según este esquema, si se aplica un filtro a la columna District Manager de la tabla District, y si ese filtro coincide con el usuario que ve el informe, ese filtro también filtra las tablas Store y Sales para mostrar los datos de ese jefe de distrito.Based on this schema, if we apply a filter to the District Manager column in the District table, and if that filter matches the user viewing the report, that filter down the Store and Sales tables to show data for that district manager.

Le mostramos cómo:Here's how:

  1. En la ficha Modelado, seleccione Administrar roles.On the Modeling tab, select Manage Roles.

    Pestaña Modelado de Power BI Desktop

  2. Cree un nuevo rol llamado Manager.Create a new role called Manager.

    Creación de un nuevo rol

  3. En la tabla District, escriba esta expresión DAX: [District Manager] = USERNAME() .In the District table, enter this DAX expression: [District Manager] = USERNAME().

    Instrucción DAX para regla de RLS

  4. Para asegurarse de que las reglas funcionen, en la pestaña Modelado, seleccione Ver como roles y, luego, el rol Administrador que acaba de crear, junto con Otros usuarios.To make sure the rules are working, on the Modeling tab, select View as Roles, and then select both the Manager role you created, along with Other users. Escriba Andrew Ma para el usuario.Enter Andrew Ma for the user.

    Cuadro de diálogo Ver como roles

    Los informes muestran los datos como si hubiera iniciado sesión como Andrew Ma.The reports show data as if you're signed in as Andrew Ma.

Al aplicar el filtro como se ha hecho aquí, se filtran todos los registros de las tablas District, Store y Sales.Applying the filter, the way we did here, filters down all records in the District, Store, and Sales tables. Pero, debido a la dirección del filtro en las relaciones entre las tablas Sales y Time, no se filtrarán las tablas Sales e Item e Item y Time.However, because of the filter direction on the relationships between Sales and Time, Sales and Item, and Item and Time tables aren't filtered down. Para aprender más sobre filtrado cruzado bidireccional, descargue el documento técnico sobre el filtrado cruzado bidireccional en SQL Server Analysis Services 2016 y Power BI Desktop.To learn more about bidirectional cross-filtering, download the Bidirectional cross-filtering in SQL Server Analysis Services 2016 and Power BI Desktop whitepaper.

Aplicación de usuarios y roles a un token de inserciónApplying user and role to an embed token

Ahora que tiene configurados los roles de Power BI Desktop, es necesario hacer algunas cosas en la aplicación para aprovechar sus ventajas.Now that you have your Power BI Desktop roles configured, some more work needs to be done in your application to take advantage of the roles.

La aplicación autentica y autoriza a los usuarios y los tokens de inserción se usan para conceder a ese usuario acceso a un informe específico de Power BI Embedded.Users are authenticated and authorized by your application and embed tokens are used to grant a user access to a specific Power BI Embedded report. Power BI Embedded no tiene ninguna información específica sobre quién es el usuario.Power BI Embedded doesn't have any specific information on who your user is. Para que RLS funcione, es necesario pasar un poco más de contexto como parte del token de inserción en forma de identidades.For RLS to work, you need to pass some additional context as part of your embed token in the form of identities. Puede pasar las identidades mediante la API Embed Token.You can pass the identities by using the Embed Token API.

La API acepta una lista de identidades con la indicación de los conjuntos de datos pertinentes.The API accepts a list of identities with indication of the relevant datasets. Para que RLS funcione, debe pasar los siguientes elementos como parte de la identidad.For RLS to work, you need to pass the below pieces as part of the identity.

  • nombre de usuario (obligatorio) : una cadena que se puede usar para ayudar a identificar el usuario al aplicar reglas de RLS.username (mandatory) – A string that can be used to help identify the user when applying RLS rules. Se puede mostrar un único usuario.Only a single user can be listed. El nombre de usuario se puede crear con caracteres ASCII.Your username can be created with ASCII characters.
  • roles (obligatorio) : una cadena que contiene los roles que se seleccionarán al aplicar reglas de seguridad de nivel de fila.roles (mandatory) – A string containing the roles to select when applying Row Level Security rules. Si se pasa más de un rol, se deben pasar como una matriz de cadenas.If passing more than one role, they should be passed as a string array.
  • conjunto de datos (obligatorio) : el conjunto de datos que es aplicable al artefacto que se va a insertar.dataset (mandatory) – The dataset that is applicable for the artifact you're embedding.

Puede crear el token de inserción mediante el método GenerateTokenInGroup de PowerBIClient.Reports.You can create the embed token by using the GenerateTokenInGroup method on PowerBIClient.Reports.

Por ejemplo, puede cambiar el ejemplo PowerBI-Developer-Samples > .NET Framework > Embed for your customers (Insertar para los clientes) > PowerBIEmbedded_AppOwnsData.For example, you could change the *PowerBI-Developer-Samples > .NET Framework > Embed for your customers > PowerBIEmbedded_AppOwnsData _ sample.

Antes del cambio*_ Before the change*

// Generate Embed Token with effective identities.
generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view", identities: new List<EffectiveIdentity> { rls });

// Generate Embed Token for reports without effective identities.
generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");

Después del cambioAfter the change

var generateTokenRequestParameters = new GenerateTokenRequest("View", null, identities: new List<EffectiveIdentity> { new EffectiveIdentity(username: "username", roles: new List<string> { "roleA", "roleB" }, datasets: new List<string> { "datasetId" }) });

var tokenResponse = await client.Reports.GenerateTokenInGroupAsync("groupId", "reportId", generateTokenRequestParameters);

Si llama a la API REST, la API actualizada acepta ahora una matriz JSON adicional, llamada identities, que contiene un nombre de usuario, una lista de roles de cadena y una lista de conjuntos de datos de cadena.If you're calling the REST API, the updated API now accepts an additional JSON array, named identities, containing a username, list of string roles and list of string datasets.

Por ejemplo, use el código siguiente:Use the following code below as an example:

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "EffectiveIdentity",
            "roles": [ "Role1", "Role2" ],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

Ahora, una vez encajadas todas las piezas, cuando alguien inicie sesión en la aplicación para ver este artefacto, solo podrá ver los datos para los que tiene permiso, como se define en la seguridad de nivel de fila.Now, with all the pieces together, when someone logs into your application to view this artifact, they'll only see the data that they're allowed to see, as defined by our row-level security.

Trabajo con conexiones activas de Analysis ServicesWorking with Analysis Services live connections

La seguridad de nivel de fila se puede usar con conexiones dinámicas de Analysis Services para servidores locales.Row-level security can be used with Analysis Services live connections for on-premises servers. Hay algunos conceptos específicos que debe conocer al usar este tipo de conexión.There are a few specific concepts that you should understand when using this type of connection.

La identidad efectiva que se proporciona para la propiedad username debe ser la de un usuario de Windows con permisos en el servidor de Analysis Services.The effective identity that is provided for the username property must be a Windows user with permissions on the Analysis Services server.

Nota

Al usar una entidad de servicio con un origen de datos de Azure Analysis Services, la propia entidad de servicio debe tener permisos de una instancia de Azure Analysis Services.When using service principal with an Azure Analysis Services data source, the service principal itself must have an Azure Analysis Services instance permissions. El uso de un grupo de seguridad que contiene la entidad de servicio para este propósito no funciona.Using a security group that contains the service principal for this purpose, doesn't work.

Configuración de una puerta de enlace de datos localOn-premises data gateway configuration

Se usa una puerta de enlace de datos local cuando se trabaja con conexiones activas de Analysis Services.An On-premises data gateway is used when working with Analysis Services live connections. Cuando se genera un token de inserción, con una identidad mostrada, la cuenta maestra debe aparecer como administrador de la puerta de enlace.When generating an embed token, with an identity listed, the master account needs to be listed as an admin of the gateway. Si no aparece la cuenta maestra, la seguridad de nivel de fila no se aplica a la propiedad de los datos.If the master account isn't listed, the row-level security isn't applied to the property of the data. Un usuario de la puerta de enlace distinto del administrador puede proporcionar roles, pero deberá especificar su propio nombre de usuario para la identidad efectiva.A non-admin of the gateway can provide roles, but must specify its own username for the effective identity.

Uso de rolesUse of roles

Los roles se pueden proporcionar con la identidad en un token de inserción.Roles can be provided with the identity in an embed token. Si no se proporciona ningún rol, se puede usar el nombre de usuario que se proporcionó para resolver los roles asociados.If no role is provided, the username that was provided can be used to resolve the associated roles.

Uso de la característica CustomDataUsing the CustomData feature

La característica CustomData solo funciona con modelos que residen en Azure Analysis Services y únicamente en modo de conexión en directo.The CustomData feature only works for models that lie in Azure Analysis Services, and it only works in Connect live mode. A diferencia de los usuarios y los roles, la característica Datos personalizados no se puede establecer en un archivo .pbix.Unlike users and roles, the Custom data feature can't be set inside a .pbix file. Al generar un token con la característica Customdata, es necesario tener un nombre de usuario.When generating a token with the Custom data feature, you need to have a username.

Nota

El nombre de usuario CustomData solo puede tener una longitud de 256 caracteres.The CustomData username can only be 256 characters long.

La característica CustomData permite agregar un filtro de fila al visualizar datos de Power BI en su aplicación cuando se usa Azure Analysis Services como origen de datos (visualización de datos de Power BI conectados a Azure Analysis Services en la aplicación).The CustomData feature allows you to add a Row filter when viewing Power BI data in your application when using Azure Analysis Services as your data source (viewing Power BI data connected to Azure Analysis Services in your application).

La característica CustomData permite pasar texto sin formato (cadena) mediante la propiedad de cadena de conexión CustomData.The CustomData feature allows passing free text (string) using the CustomData connection string property. Analysis Services usa este valor mediante la función CUSTOMDATA() .Analysis Services uses this value via the CUSTOMDATA() function.

La única manera de tener RLS dinámica (que usa valores dinámicos para la evaluación del filtro) en Azure Analysis Services es usar la función CUSTOMDATA() .The only way to have dynamic RLS (which uses dynamic values for filter evaluation) in Azure Analysis Services, is using the CUSTOMDATA() function.

Se puede usar dentro de la consulta DAX de rol y también sin ningún rol en una consulta DAX de medida.You can use it inside the role DAX query, and you can use it without any role in a measure DAX query. La característica CustomData forma parte de la funcionalidad de generación de tokens para los siguientes artefactos: panel, informe e icono.CustomData feature is part of our token generation functionality for the following artifacts: dashboard, report, and tile. Los paneles pueden tener varias identidades CustomData (una por icono o modelo).Dashboards can have multiple CustomData identities (one per tile/model).

Adiciones del SDK de CustomDataCustomData SDK Additions

La propiedad de cadena CustomData se ha agregado a la identidad efectiva en el escenario de generación de tokens.The CustomData string property was added to our effective identity in the token generation scenario.

[JsonProperty(PropertyName = "customData")]
public string CustomData { get; set; }

La identidad se puede crear con CustomData mediante la siguiente llamada:The identity can be created with custom data using the following call:

public EffectiveIdentity(string username, IList<string> datasets, IList<string> roles = null, string customData = null);

Uso del SDK de CustomDataCustomData SDK Usage

Si llama a la API REST, puede agregar datos personalizados dentro de cada identidad, por ejemplo:If you're calling the REST API, you can add custom data inside each identity, for example:

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "EffectiveIdentity",
            "roles": [ "Role1", "Role2" ],
            "customData": "MyCustomData",
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

Estos son los pasos para comenzar a configurar la característica CustomData() con la aplicación Power BI Embedded.Here are the steps to begin setting up the CustomData() feature with your Power BI Embedded application.

  1. Cree su base de datos de Azure Analysis Services.Create your Azure Analysis Services database. A continuación, inicie sesión en el servidor de Azure Analysis Services mediante SQL Server Management Studio.Then sign in to your Azure Analysis Services server via SQL Server Management Studio.

    Creación de una base de datos de Azure Analysis Services

    Base de datos de Analysis Services

  2. Cree un rol en el servidor de Analysis Services.Create a Role in the Analysis Services server.

    Creación de un rol

  3. Establezca su configuración General.Set your General settings. Aquí se proporciona el nombre del rol y se establecen los permisos de base de datos como de solo lectura.Here you give the Role Name and set the database permissions to Read only.

    Creación de un rol: establecimiento de la configuración General

  4. Establezca la configuración de pertenencia.Set the Membership settings. Aquí agregará los usuarios afectados por este rol.Here you add te users that are affected by this role.

    Creación de un rol: establecimiento de la configuración de pertenencia

  5. Establezca la consulta DAK de filtros de fila mediante la función CUSTOMDATA() .Set your Row filters DAX query using the CUSTOMDATA() function.

    Creación de un rol: establecimiento de filtros de fila

  6. Cree un informe de PBI y publíquelo en un área de trabajo con capacidad.Build a PBI report and publish it to a workspace with capacity.

    Ejemplo de informe de PBI

  7. Use las API de Power BI para utilizar la característica CustomData en su aplicación.Use the Power BI APIs to use the CustomData feature in your application. Al generar un token con la característica Customdata, es necesario tener un nombre de usuario.When generating a token with the Custom data feature, you need to have a username. El nombre de usuario debe ser igual que el UPN del usuario maestro.The username must be equal to the UPN of the master user. El usuario maestro debe ser miembro de los roles que ha creado.The master user must be a member of the role(s) you created. Si no se especifica ningún rol, todos los roles de los que es miembro el usuario maestro se usan para la evaluación de RLS.If no role(s) are specified, then all the roles the master user is a member of are used for RLS evaluation.

    Cuando trabaje con una entidad de servicio también deberá seguir los pasos anteriores en lugar de usar una cuenta maestra.When working with a service principal, you also need to do the above steps in place of using a master account. Al generar el token de inserción, use el identificador de objeto de la entidad de servicio como el nombre de usuario.When generating embed token, use the service principal object ID as the username.

    Nota

    Cuando esté listo para implementar la aplicación en producción, la opción o el campo de la cuenta de usuario maestro no deben ser visible para el usuario final.When you're ready to deploy your application to production, the master user account field or option should not be visible to the end user.

    Vea el código para agregar la característica CustomData.View the code to add the CustomData feature.

  8. Ahora puede visualizar el informe en la aplicación antes de aplicar los valores de Datos personalizados para ver todos los datos que contiene el informe.Now you can view the report in your application before applying the Custom data value(s) to see all the data your report holds.

    Antes de aplicar datos personalizados

    A continuación, aplique los valores Datos personalizados para ver cómo el informe muestra un conjunto de datos diferente.Then apply the Custom data value(s) to see how the report displays a different set of data. Después de aplicar CustomDataAfter CustomData is applied

Uso de RLS frente a filtros de JavaScriptUsing RLS vs. JavaScript filters

A la hora de decidir sobre el filtrado de los datos en un informe, puede usar seguridad de nivel de fila (RLS) o filtros de JavaScript.When deciding on filtering your data in a report, you can use row-level security (RLS) or JavaScript filters.

Seguridad de nivel de fila es una característica que filtra los datos en el nivel de modelo de datos.Row-level security is a feature that filters data at the data model level. El origen de datos back-end controla la configuración de RLS.Your backend data source controls your RLS settings. Según el modelo de datos, la generación de tokens de inserción establece el nombre de usuario y los roles de la sesión.Based on your data model, the embed token generation sets the username and the roles for the session. No se puede reemplazar, eliminar o controlar mediante el código del lado cliente y por eso se considera segura.It cannot be overridden, removed, or controlled by the client-side code and that's why it's considered secure. Se recomienda usar RLS para filtrar los datos de forma segura.We recommend using RLS for filtering data securely. Puede filtrar datos con RLS mediante una de las opciones siguientes.You can filter data with RLS by using one of the options below.

  • Configuración de roles en un informe de Power BI.Configuring roles in a Power BI report.
  • Configuración de roles en el nivel de origen de datos (solo conexión dinámica de Analysis Services).Configuring roles at the data source level (Analysis Services live connection only).
  • Mediante programación con un token de inserción con EffectiveIdentity.Programmatically with an Embed Token using EffectiveIdentity. Cuando se usa un token de inserción, el filtro real pasa por el token de inserción en una sesión específica.When using an embed token, the actual filter passes through the embed token for a specific session.

Los filtros de JavaScript se usan para permitir que el usuario consuma una vista de los datos con ámbito, reducida o filtrada.JavaScript filters are used to allow the user to consume reduced, scoped, or a filtered view of the data. Sin embargo, el usuario todavía tiene acceso al esquema, las tablas, las columnas y las medidas del modelo y potencialmente puede acceder a cualquier dato que ahí exista.However, the user still has access to the model schema tables, columns, and measures and potentially can access any data there. El acceso restringido a los datos solo se puede aplicar con RLS y no mediante las API de filtrado del lado cliente.Restricted access to the data can only be applied with RLS and not through client-side filtering APIs.

Identidad basada en token con Azure SQL DatabaseToken-based Identity with Azure SQL Database

La identidad basada en token le permite especificar la identidad efectiva para un token de inserción mediante un token de acceso de Azure Active Directory (AAD) para una instancia de Azure SQL Database.The token-based identity allows you to specify the effective identity for an embed token using Azure Active Directory (AAD) access token for an Azure SQL Database.

Los clientes que mantienen sus datos en Azure SQL Database ahora pueden disfrutar de una nueva funcionalidad para administrar los usuarios y su acceso a los datos en SQL Azure cuando se integran con Power BI Embedded.Customers that hold their data in Azure SQL Database can now enjoy a new capability to manage users and their access to data in Azure SQL when integrating with Power BI Embedded.

Al generar el token de inserción, puede especificar la identidad efectiva de un usuario en Azure SQL.When you're generating the embed token, you can specify the effective identity of a user in Azure SQL. Puede especificar la identidad efectiva de un usuario pasando el token de acceso de AAD al servidor.You can specify the effective identity of a user by passing the AAD access token to the server. El token de acceso se usa para extraer solo los datos pertinentes para ese usuario de Azure SQL, para esa sesión específica.The access token is used to pull only the relevant data for that user from Azure SQL, for that specific session.

Se puede usar para administrar la vista de cada usuario en Azure SQL, o bien para iniciar sesión en Azure SQL como un cliente específico de una base de datos de varios inquilinos.It can be used to manage each user's view in Azure SQL or to sign in to Azure SQL as a specific customer in a multi-tenant DB. También puede aplicar la seguridad de nivel de fila en esa sesión en Azure SQL y recuperar solo los datos pertinentes para esa sesión, eliminando la necesidad de administrar RLS en Power BI.It can also apply row-level security on that session in Azure SQL and retrieve only the relevant data for that session, removing the need to manage RLS in Power BI.

Estos problemas de identidad efectiva se aplican a las reglas RLS directamente en Azure SQL Server.Such effective identity issues apply to RLS rules directly on the Azure SQL Server. Power BI Embedded usa el token de acceso proporcionado al consultar datos desde Azure SQL Server.Power BI Embedded uses the provided access token when querying data from the Azure SQL Server. El UPN del usuario (para el que se proporcionó el token de acceso) es accesible como resultado de la función SQL USER_NAME ().The UPN of the user (for which the access token was provided) is accessible as a result of the USER_NAME() SQL function.

La identidad basada en token solo funciona con modelos de DirectQuery de una capacidad —conectada a una instancia de Azure SQL Database— configurada para permitir la autenticación de AAD (más información sobre la autenticación de AAD para Azure SQL Database).The token-based identity only works for DirectQuery models on a capacity - connected to an Azure SQL Database, which is configured to allow AAD authentication (learn more about AAD authentication for Azure SQL Database). El origen de datos del conjunto de datos se debe configurar para usar las credenciales de OAuth2 de los usuarios finales, a fin de usar una identidad basada en token.The dataset's data source must be configured to use end users' OAuth2 credentials, to use a token-based identity.

Configuración de Azure SQL Server

Adiciones de SDK de la identidad basada en tokenToken-based Identity SDK additions

La propiedad de del blob de identidad se ha agregado a la identidad efectiva en el escenario de generación de tokens.The identity blob property was added to our effective identity in the token generation scenario.

[JsonProperty(PropertyName = "identityBlob")]
public IdentityBlob IdentityBlob { get; set; }

El tipo IdentityBlob es una estructura JSON simple que contiene una propiedad de cadena del valorThe IdentityBlob type is a simple JSON structure holding a value string property

[JsonProperty(PropertyName = "value")]
public string value { get; set; }

EffectiveIdentity se puede crear con el blob de identidad mediante la siguiente llamada:The EffectiveIdentity can be created with identity blob using the following call:

public EffectiveIdentity(string username, IList<string> datasets, IList<string> roles = null, string customData = null, IdentityBlob identityBlob = null);

El blob de identidad se puede crear mediante la siguiente llamada.Identity blob can be created using the following call.

public IdentityBlob(string value);

Uso de API REST de identidad basada en tokenToken-based Identity REST API Usage

Si llama a la API REST, puede agregar un blob de identidad dentro de cada identidad.If you're calling the REST API, you can add identity blob inside each identity.

{
    "accessLevel": "View",
    "identities": [
        {
            "datasets": ["fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc"],
        "identityBlob": {
            "value": "eyJ0eXAiOiJKV1QiLCJh…."
         }
        }
    ]
}

El valor proporcionado en el blob de identidad debe ser un token de acceso válido en Azure SQL Server (con una dirección URL de recursos de https://database.windows.net/).The value provided in the identity blob should be a valid access token to Azure SQL Server (with a resource URL of (https://database.windows.net/).

Nota

Para poder crear un token de acceso para Azure SQL, la aplicación debe tener permiso delegado de acceso a Azure SQL Database y Data Warehouse a la API Azure SQL Database en la configuración de registro de la aplicación AAD en Azure Portal.To be able to create an access token for Azure SQL, the application must have Access Azure SQL DB and Data Warehouse delegated permission to Azure SQL Database API on AAD app registration configuration in the Azure portal.

Registro de la aplicación

Puerta de enlace de datos local con entidad de servicioOn-premises data gateway with service principal

Los clientes que usan un origen de datos de conexión dinámica local de SQL Server Analysis Services (SSAS) pueden disfrutar de la funcionalidad de entidad de servicio para administrar usuarios y su acceso a los datos de SSAS cuando se integra con Power BI Embedded.Customers that are using SQL Server Analysis Services (SSAS) on-premises live connection data source, can enjoy the service principal capability to manage users and their access to data in SSAS when integrating with Power BI Embedded.

Mediante las API REST de Power BI, puede especificar la identidad efectiva para las conexiones dinámicas locales de SSAS para un token de inserción con un objeto de entidad de servicio.Using Power BI REST APIs, allows you to specify the effective identity for SSAS on-premises live connections for an embed token using a service principal object.

Hasta ahora, para poder especificar la identidad efectiva para conexiones dinámicas locales de SSAS, el usuario maestro que generaba el token de inserción tenía que ser un administrador de puerta de enlace. Ahora, en lugar de requerir que el usuario sea un administrador de puerta de enlace, el administrador de puerta de enlace puede asignar permiso dedicado al usuario para ese origen de datos, lo que le permite reemplazar la identidad efectiva al generar el token de inserción.Until now, to be able to specify the effective identity for SSAS on-premises live connection, the master user generating the embed token had to be a gateway admin. Now, instead of requiring the user to be gateway admin, the gateway admin can give the user dedicated permission to that data source, that allows the user to override the effective identity when generating the embed token. Esta nueva funcionalidad permite realizar la inserción con la entidad de servicio para una conexión activa de SSAS.This new ability enables embedding with service principal for a live SSAS connection.

Para habilitar este escenario, el administrador de puerta de enlace usa la API REST Add Datasource User para asignar a la entidad de servicio el permiso ReadOverrideEffectiveIdentity para el origen de datos de SSAS.To enable this scenario, the gateway admin uses the Add Datasource User REST API to give the service principal the ReadOverrideEffectiveIdentity permission for the SSAS data source.

No se puede establecer este permiso mediante el portal de administración.You can't set this permission using the admin portal. Este permiso solo se establece con la API.This permission is only set with the API. En el portal de administración, verá una indicación para los usuarios y los SPN con esos permisos.In the admin portal, you see an indication for users and SPNs with such permissions.

Nota

Si está conectado a una base de datos de SSAS sin configuración de RLS, debe proporcionar una identidad efectiva (la del administrador del servidor de SSAS) en la llamada de generación del token de inserción.If you are connected to an SSAS database without RLS configured on it, you still need to supply an effective identity (the identity of the SSAS server admin) in the embed token generation call.

Consideraciones y limitacionesConsiderations and limitations

  • La asignación de usuarios a roles dentro del servicio Power BI no afecta a RLS cuando se usa un token de inserción.Assignment of users to roles within the Power BI service doesn't affect RLS when using an embed token.
  • Aunque el servicio Power BI no aplica valores de RLS a administradores o miembros con permisos de edición, cuando se suministre una identidad con un token de inserción, se aplica a todos los datos.While the Power BI service doesn't apply RLS setting to admins or members with edit permissions, when you supply an identity with an embed token, it applies to the data.
  • Se admiten las conexiones activas de Analysis Services para los servidores locales.Analysis Services live connections are supported for on-premises servers.
  • Las conexiones activas de Azure Analysis Services admiten el filtrado por rol.Azure Analysis Services live connections support filtering by roles. El filtrado dinámico se puede llevar a cabo mediante CustomData.Dynamic filtering can be done using CustomData.
  • Si el conjunto de datos subyacente no requiere RLS, la solicitud GenerateToken no debe contener una identidad efectiva.If the underlying dataset doesn't require RLS, the GenerateToken request must not contain an effective identity.
  • Si el conjunto de datos subyacente es un modelo de nube (modelo en caché o DirectQuery), la identidad efectiva debe incluir al menos un rol ya que, de lo contrario, la asignación de roles no se produce.If the underlying dataset is a cloud model (cached model or DirectQuery), the effective identity must include at least one role, otherwise role assignment doesn't occur.
  • Una lista de identidades habilita varios tokens de identidad para la inserción del panel.A list of identities enables multiple identity tokens for dashboard embedding. Para todos los demás artefactos, la lista contiene una sola identidad.For all others artifacts, the list contains a single identity.

Limitaciones de identidad basada en tokenToken-based Identity limitations

  • Solo puede usar RLS si tiene una capacidad.You can use RLS only if you have a capacity.
  • RLS no funciona con SQL Server local.RLS doesn't work with SQL Server on-premises.

¿Tiene más preguntas?More questions? Pruebe a preguntar a la comunidad de Power BITry asking the Power BI Community