Compartir a través de


Inserción de informes con RLS

SE APLICA A: La aplicación es la propietaria de los datos El usuario es el propietario de los datos

En este artículo, se explica cómo insertar contenido de Power BI que usa RLS en una aplicación de Power BI estándar que es propietaria de los datos.

Prerrequisitos

Para obtener una explicación detallada sobre cómo configurar RLS, consulte Seguridad de nivel de fila (RLS) con Power BI.

Al definir los roles de RLS, tenga en cuenta que la expresión DAX que use determina si el modelo de RLS es estático o dinámico.

Cuándo usar seguridad estática y dinámica

La seguridad estática usa un valor fijo en el filtro DAX para definir cada rol. Es fácil de implementar pero difícil de mantener cuando hay muchos usuarios u organizaciones implicados.

La seguridad estática funciona mejor para un ISV que atiende a uno o algunos clientes grandes, donde cada departamento necesita acceder a datos diferentes.

La seguridad dinámica usa una función DAX (username() o userprincipalname()) para definir los roles. La seguridad dinámica proporciona más flexibilidad y permite administrar los datos con menos roles y menos mantenimiento.

Seguridad estática

Con los roles estáticos, pasa el rol a Power BI cuando genera un token de inserción y el usuario ve los datos en función de ese rol. Para crear roles de seguridad estáticos, escriba un valor fijo en el filtro DAX.

Por ejemplo, puede definir el rol de Este de EE. UU. como [Region] = "East".

Captura de pantalla que muestra cómo definir un rol de RLS estático.

Supongamos que john@contoso.com es un usuario de su aplicación. Quiere concederle a John acceso a los datos del rol Este de EE. UU. Para insertar un informe para john@contoso.com, genere un token de inserción usando el rol Este de EE.UU. Los datos resultantes se filtran para [Region] = "East".

Nota

Al generar el token de inserción, debe proporcionar un nombre de usuario, que puede ser cualquier cadena. Los roles estáticos tienen un valor fijo que no depende de un nombre de usuario, por lo que una vez que el ISV determina el rol del usuario y lo pasa al token de inserción, los datos se filtran según ese rol, independientemente del nombre de usuario que se haya pasado.

Seguridad dinámica

La seguridad dinámica usa la función DAX (username() o userprincipalname()) para definir el rol.

En el escenario donde el usuario es propietario de los datos, el modelo de RLS filtra automáticamente los datos en función de los roles del usuario específico. Cuando la aplicación es propietaria de los datos, Power BI no conoce los nombres de usuario de los clientes del ISV, por lo que puede usar la función username() para filtrar dinámicamente los datos.

Cree un rol en Power BI Desktop con la función username(). Por ejemplo, puede crear un rol denominado CountryDynamic y definirlo como [CountryRegionCode] = username().

Captura de pantalla que muestra cómo crear un rol de RLS dinámico.

Supongamos que quiere proporcionar a su usuario (jane@contoso.com) acceso a los datos de Francia. Cuando genera un token de inserción para jane@contoso.com, pasa la cadena Francia como username en el rol CountryDynamic. Los datos se filtran según [CountryRegionCode] = Francia.

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

Al usar la seguridad dinámica en este escenario, solo necesita un rol para todas las regiones. El nombre de la región se usa como identidad efectiva.

Generación de un token de inserción

Cuando esté listo para insertar el informe en la aplicación, debe generar un token de inserción. Para generar un token con la API EmbedToken, pase la siguiente información a la API.

  • username (obligatorio): si los roles son dinámicos, la cadena de username se usa como filtro. En el caso de los roles estáticos, el valor de username no afecta a RLS y puede ser absolutamente cualquier cadena. Solo se puede mostrar un valor de username.
  • roles (obligatorio): roles que se usan al aplicar las reglas de Seguridad de nivel de fila. Si se pasa más de un rol, se deben pasar como una matriz de cadenas.
  • dataset (obligatorio): conjunto de datos aplicable al elemento que se va a insertar.

Ya puede insertar el informe en la aplicación. El informe filtra los datos según la RLS aplicada.

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
    {
        PowerBIClient pbiClient = this.GetPowerBIClient();

       // Defines the user identity and roles.
        var rlsIdentity = new EffectiveIdentity(
            username: "France",
            roles: new List<string>{ "CountryDynamic" },
            datasets: datasetIds.Select(id => id.ToString()).ToList());
        );
       
        // Create a request for getting an embed token for the rls identity defined above
        var tokenRequest = new GenerateTokenRequestV2(
            reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
            datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
            targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
            identities: new List<EffectiveIdentity> { rlsIdentity }
        );

        // Generate an embed token
        var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

        return embedToken;
    }

Consideraciones y limitaciones

  • En función de la configuración, es posible que tenga que realizar varios pasos antes de generar un token de inserción. Para obtener información sobre los distintos escenarios, consulte Inserción de un informe que utiliza características de seguridad.
  • El usuario que genera el token de inserción debe ser miembro o administrador en las dos áreas de trabajo (del conjunto de datos y del informe).
  • Cuando genere el token de inserción, debe proporcionar un nombre de usuario y un rol. Si no lo hace, ocurrirá uno de los siguientes eventos, en función de si es la entidad de servicio o es el usuario maestro quien genera el token:
    • En el caso de una entidad de servicio, no se genera el token.
    • En el caso de un usuario maestro, el token se genera correctamente, pero no se filtran los datos (se devuelven todos los datos).

¿Tiene más preguntas? Consulte la Comunidad de Power BI.