Einbetten eines Berichts mit RLS

GILT FÜR: Die App besitzt die Daten Der Benutzer besitzt die Daten

In diesem Artikel wird erläutert, wie Sie Power BI-Inhalte, die RLS verwenden, in eine Standard-Power BI-Anwendung einbetten, die nach dem „die-Anwendung-besitzt-die-Daten“-Paradigma funktioniert.

Voraussetzungen

Ausführliche Erläuterungen zum Einrichten von RLS finden Sie unter Sicherheit auf Zeilenebene (Row-Level Security, RLS) mit Power BI.

Beachten Sie beim Definieren Ihrer RLS-Rollen, dass der von Ihnen verwendete DAX-Ausdruck bestimmt, ob das RLS-Modell statisch oder dynamisch ist.

Einsatzbereiche für statische und dynamische Sicherheit

Bei statischer Sicherheit wird ein fester Wert im DAX-Filter für die Definition der einzelnen Rollen verwendet. Sie ist einfach zu implementieren, aber schwierig zu verwalten, wenn viele Benutzer oder Organisationen beteiligt sind.

Statische Sicherheit funktioniert am besten für einen ISV, der einen oder mehrere große Kunden bedient, bei denen jede Abteilung auf unterschiedliche Daten zugreifen muss.

Bei dynamischer Sicherheit wird eine DAX-Funktion (username() oder userprincipalname()) verwendet, um die Rollen zu definieren. Dynamische Sicherheit bietet mehr Flexibilität und ermöglicht Ihnen das Verwalten Ihrer Daten mit weniger Rollen.

Statische Sicherheit

Bei statischen Rollen wird die Rolle beim Generieren eines EInbettungstokens an Power BI übergeben, und der Benutzer sieht die dieser Rolle entsprechenden Daten. Geben Sie zum Erstellen statischer Sicherheitsrollen einen festen Wert im DAX-Filter an.

Beispielsweise können Sie die Rolle von USA, Osten als [Region] = "East" definieren.

Screenshot, der die Definition einer statischen RLS-Rolle darstellt.

Nehmen wir an, john@contoso.com ist ein Benutzer Ihrer App. Sie möchten John Zugriff auf Daten aus der Rolle USA, Osten geben. Zum Einbetten eines Berichts für john@contoso.com generieren Sie ein Einbettungstoken mithilfe der Rolle USA, Osten. Die resultierenden Daten sind nach [Region] = "East" gefiltert.

Hinweis

Wenn Sie das Einbettungstoken generieren, müssen Sie einen Benutzernamen angeben, aber als Benutzername kann jede beliebige Zeichenfolge dienen. Statische Rollen weisen einen festen Wert auf, der nicht von einem Benutzernamen abhängig ist. Nachdem der ISV die Rolle des Benutzers bestimmt und an das Einbettungstoken übergeben hat, werden die Daten entsprechend der Rolle gefiltert, unabhängig von dem übergebenen Benutzernamen.

Dynamische Sicherheit

Bei dynamischer Sicherheit wird die DAX-Funktion (username() oder userprincipalname()) verwendet, um die Rolle zu definieren.

Im Szenario der Benutzer besitzt die Daten filtert das RLS-Modell die Daten automatisch auf der Grundlage der Rollen des bestimmten Benutzers. Bei die Anwendung besitzt die Daten kennt Power BI die Benutzernamen der Kunden des ISVs nicht, daher können Sie die Funktion username() zum dynamischen Filtern der Daten verwenden.

Erstellen Sie eine Rolle in Power BI Desktop mithilfe der username()-Funktion. Beispielsweise können Sie eine Rolle mit dem Namen CountryDynamic erstellen und sie als [CountryRegionCode] = username() definieren.

Screenshot, der das Erstellen einer dynamischen RLS-Rolle darstellt.

Nehmen wir an, Sie möchten Ihrem Benutzer jane@contoso.com Zugriff auf Daten für France (Frankreich) geben. Wenn Sie ein Einbettungstoken für jane@contoso.com generieren, übergeben Sie die Zeichenfolge France als den Benutzernamen in der Rolle CountryDynamic. Ihre Daten sind nach [CountryRegionCode] = France gefiltert.

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

Wenn Sie in diesem Szenario dynamische Sicherheit verwenden, benötigen Sie nur eine Rolle für alle Regionen. Der Bereichsname wird als effektive Identität verwendet.

Generieren eines Einbettungstokens

Wenn Sie bereit sind, den Bericht in Ihre App einzubetten, müssen Sie ein Einbettungstoken generieren. Zum Generieren eines Tokens mithilfe der Einbettungstoken-API übergeben Sie die folgenden Informationen an die API.

  • username (erforderlich): Wenn die Rollen dynamisch sind, wird die username-Zeichenfolge als Filter verwendet. Bei statischen Rollen wirkt sich username nicht auf die RLS aus und kann daher jede beliebige Zeichenfolge sein. Es kann nur ein einzelner Benutzername aufgelistet werden.
  • roles (erforderlich): Die beim Anwenden der Regeln der Sicherheit auf Zeilenebene verwendete(n) Rolle(n). Wenn mehrere Rollen übergeben werden, müssen sie als Zeichenfolgenarray übergeben werden.
  • dataset (erforderlich): Das gültige Dataset für das einzubettende Element.

Sie können den Bericht jetzt in Ihre App einbetten. Der Bericht filtert Daten nach der angewendeten RLS.

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

Überlegungen und Einschränkungen

  • Je nach Ihrer Systemeinrichtung müssen Sie möglicherweise mehrere Schritte ausführen, bevor Sie ein Einbettungstoken generieren können. Informationen zu den verschiedenen Szenarien finden Sie unter Einbetten eines Berichts, der Sicherheitsfeatures verwendet.
  • Der Benutzer, der das Einbettungstoken generiert, muss Mitglied oder Administrator in beiden Arbeitsbereichen sein (dem Dataset- und dem Berichtsarbeitsbereich).
  • Beim Generieren des Einbettungstokens müssen Sie einen Benutzernamen und eine Rolle angeben. Andernfalls wird eines der folgenden Ereignisse ausgeführt, je nachdem, ob das Token vom Dienstprinzipal oder Masterbenutzer generiert wird:
    • Bei einem Dienstprinzipal schlägt die Tokengenerierung fehl.
    • Bei einem Masterbenutzer gelingt die Tokengenerierung, aber die Daten werden nicht gefiltert (alle Daten werden zurückgegeben).

Weitere Fragen? Wenden Sie sich an die Power BI-Community.