Een rapport insluiten met beveiliging op rijniveau

VAN TOEPASSING OP: App is eigenaar van gegevens die gebruiker eigenaar is van gegevens

In dit artikel wordt uitgelegd hoe u Power BI-inhoud insluit die gebruikmaakt van RLS in een standaard Power BI-app die eigenaar is van een gegevenstoepassing.

Vereisten

Raadpleeg beveiliging op rijniveau (RLS) met Power BI voor een gedetailleerde uitleg over het instellen van beveiliging op rijniveau.

Wanneer u uw RLS-rollen definieert, moet u er rekening mee houden dat de DAX-expressie die u gebruikt, bepaalt of het RLS-model statisch of dynamisch is.

Wanneer moet u statische en dynamische beveiliging gebruiken

Statische beveiliging maakt gebruik van een vaste waarde in het DAX-filter om elke rol te definiëren. Het is eenvoudig te implementeren, maar moeilijk te onderhouden wanneer er veel gebruikers of organisaties betrokken zijn.

Statische beveiliging werkt het beste voor een ISV die een of een paar grote klanten bedient waar elke afdeling toegang nodig heeft tot verschillende gegevens.

Dynamische beveiliging maakt gebruik van een DAX-functie (username() of userprincipalname()) om de rollen te definiëren. Dynamische beveiliging biedt meer flexibiliteit en stelt u in staat om uw gegevens te beheren met minder rollen en minder onderhoud.

Statische beveiliging

Met statische rollen geeft u de rol door aan Power BI wanneer u een insluittoken genereert en ziet de gebruiker gegevens op basis van die rol. Als u statische beveiligingsrollen wilt maken, voert u een vaste waarde in het DAX-filter in.

U kunt bijvoorbeeld de rol van Oost-VS definiëren als [Region] = "East"

Schermopname van het definiëren van een statische R L S-rol.

Stel dat john@contoso.com dit een gebruiker van uw app is. U wilt John toegang geven tot gegevens uit de rol VS - oost. Als u een rapport wilt john@contoso.cominsluiten, genereert u een insluittoken met de rol VS - oost. De resulterende gegevens worden gefilterd op [Region] = "East".

Notitie

Wanneer u het insluittoken genereert, moet u een gebruikersnaam opgeven, maar de gebruikersnaam kan elke tekenreeks zijn. Statische rollen hebben een vaste waarde die niet afhankelijk is van een gebruikersnaam, dus zodra de ISV de rol van de gebruiker bepaalt en doorgeeft aan het insluittoken, worden de gegevens gefilterd op basis van die rol, ongeacht welke gebruikersnaam is doorgegeven.

Dynamische beveiliging

Dynamische beveiliging maakt gebruik van de DAX-functie (username() of userprincipalname()) om de rol te definiëren.

In het gegevensscenario waarvan de gebruiker eigenaar is, filtert het RLS-model automatisch gegevens op basis van de rollen van de specifieke gebruiker. Als de app eigenaar is van gegevens, kent Power BI niet de gebruikersnamen van de klanten van de ISV, zodat u de username() functie kunt gebruiken om de gegevens dynamisch te filteren.

Maak een rol in Power BI Desktop met behulp van de functie username(). U kunt bijvoorbeeld een rol maken met de naam CountryDynamic en deze definiëren als [CountryRegionCode] = username()

Schermopname die laat zien hoe u een dynamische R L S-rol maakt.

Stel dat u uw gebruiker jane@contoso.comtoegang wilt geven tot gegevens voor Frankrijk. Wanneer u een insluittoken genereertjane@contoso.com, geeft u de tekenreeks Frankrijk door als gebruikersnaam in de rol CountryDynamic. Uw gegevens worden gefilterd op basis van [CountryRegionCode] = Frankrijk.

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

Wanneer u dynamische beveiliging in dit scenario gebruikt, hebt u slechts één rol nodig voor alle regio's. De regionaam wordt gebruikt als de effectieve identiteit.

Een insluittoken genereren

Wanneer u klaar bent om het rapport in te sluiten in uw app, moet u een insluittoken genereren. Als u een token wilt genereren met behulp van de Insluittoken-API, geeft u de volgende informatie door aan de API.

  • gebruikersnaam (vereist): als de rollen dynamisch zijn, wordt de gebruikersnaamtekenreeks gebruikt als het filter. Voor statische rollen heeft de gebruikersnaam geen invloed op de RLS en kan een willekeurige tekenreeks zijn. Er kan slechts één gebruikersnaam worden weergegeven.
  • rollen (vereist): de rollen die worden gebruikt bij het toepassen van regels voor beveiliging op rijniveau. Als meerdere rollen worden doorgegeven, moeten ze worden doorgegeven als een tekenreeksmatrix.
  • gegevensset (vereist): de gegevensset die van toepassing is op het item dat u insluit.

U kunt het rapport nu insluiten in uw app. Het rapport filtert gegevens op basis van de toegepaste beveiliging op rijniveau.

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;
    }

Overwegingen en beperkingen

  • Afhankelijk van uw installatie moet u mogelijk verschillende stappen uitvoeren voordat u een insluittoken kunt genereren. Zie Een rapport insluiten dat gebruikmaakt van beveiligingsfuncties voor meer informatie over de verschillende scenario's.
  • De gebruiker die het insluittoken genereert, moet lid of beheerder zijn in beide werkruimten (de werkruimte van de gegevensset en de rapportwerkruimte).
  • Bij het genereren van het insluittoken moet u een gebruikersnaam en een rol opgeven. Als u dit niet doet, vindt een van de volgende gebeurtenissen plaats, afhankelijk van of het token wordt gegenereerd door een service-principal of hoofdgebruiker:
    • Voor een service-principal mislukt het genereren van tokens.
    • Voor een hoofdgebruiker slaagt het genereren van tokens, maar worden de gegevens niet gefilterd (alle gegevens worden geretourneerd).

Meer vragen? Probeer de Power BI-community.