Udostępnij za pośrednictwem


Osadzanie raportu z zabezpieczeniami na poziomie wiersza

DOTYCZY: Aplikacja jest właścicielem danych Użytkownik jest właścicielem danych

W tym artykule wyjaśniono, jak osadzić zawartość usługi Power BI korzystającą z zabezpieczeń na poziomie wiersza w standardowej aplikacji usługi Power BI będącej właścicielem aplikacji danych.

Wymagania wstępne

Aby uzyskać szczegółowy opis sposobu konfigurowania zabezpieczeń na poziomie wiersza, zobacz Zabezpieczenia na poziomie wiersza w usłudze Power BI.

Podczas definiowania ról zabezpieczeń na poziomie wiersza należy pamiętać, że używane wyrażenie języka DAX określa, czy model zabezpieczeń na poziomie wiersza jest statyczny lub dynamiczny.

Kiedy należy używać zabezpieczeń statycznych i dynamicznych

Zabezpieczenia statyczne używają stałej wartości w filtrze języka DAX, aby zdefiniować każdą rolę. Implementacja jest prosta, ale trudna do utrzymania, gdy zaangażowanych jest wielu użytkowników lub organizacji.

Zabezpieczenia statyczne działają najlepiej w przypadku niezależnego dostawcy oprogramowania, który obsługuje jednego lub kilku dużych klientów, w których każdy dział musi uzyskać dostęp do różnych danych.

Zabezpieczenia dynamiczne używają funkcji języka DAX (username() lub userprincipalname()) do zdefiniowania ról. Zabezpieczenia dynamiczne zapewniają większą elastyczność i umożliwiają zarządzanie danymi przy użyciu mniejszej liczby ról i mniejszej konserwacji.

Zabezpieczenia statyczne

W przypadku ról statycznych rola jest przekazywana do usługi Power BI podczas generowania tokenu osadzania, a użytkownik widzi dane zgodnie z tym rolą. Aby utworzyć statyczne role zabezpieczeń, wprowadź stałą wartość w filtrze języka DAX.

Na przykład można zdefiniować rolę Wschodnie stany USA jako [Region] = "East"

Zrzut ekranu przedstawiający sposób definiowania statycznej roli języka R L S.

Załóżmy, że john@contoso.com jest to użytkownik aplikacji. Chcesz przyznać Janowi dostęp do danych z roli Wschodnie stany USA . Aby osadzić raport dla john@contoso.comelementu , wygeneruj token osadzania przy użyciu roli Wschodnie stany USA . Wynikowe dane są filtrowane dla elementu [Region] = "East".

Uwaga

Podczas generowania tokenu osadzania musisz podać nazwę użytkownika, ale nazwa użytkownika może być dowolnym ciągiem. Role statyczne mają stałą wartość, która nie jest zależna od nazwy użytkownika, więc gdy niezależnego dostawcy oprogramowania określi rolę użytkownika i przekaże ją do tokenu osadzania, dane są filtrowane zgodnie z rolą niezależnie od tego, która nazwa użytkownika została przekazana.

Zabezpieczenia dynamiczne

Zabezpieczenia dynamiczne używają funkcji języka DAX (username() lub userprincipalname()) do zdefiniowania roli.

W scenariuszu użytkownika jest właścicielem danych model zabezpieczeń na poziomie wiersza automatycznie filtruje dane na podstawie ról określonego użytkownika. Gdy aplikacja jest właścicielem danych, usługa Power BI nie zna nazw użytkowników klientów niezależnego dostawcy oprogramowania, więc możesz użyć username() tej funkcji do dynamicznego filtrowania danych.

Utwórz rolę w programie Power BI Desktop przy użyciu funkcji username(). Można na przykład utworzyć rolę o nazwie CountryDynamic i zdefiniować ją jako [CountryRegionCode] = username()

Zrzut ekranu przedstawiający sposób tworzenia dynamicznej roli języka R L S.

Załóżmy, że chcesz nadać użytkownikowi , jane@contoso.comdostęp do danych dla Francji. Podczas generowania tokenu osadzania dla jane@contoso.comelementu należy przekazać ciąg France jako nazwę użytkownika w roli CountryDynamic . Dane są filtrowane zgodnie z [CountryRegionCode] = Francja.

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

W przypadku korzystania z zabezpieczeń dynamicznych w tym scenariuszu potrzebna jest tylko jedna rola dla wszystkich regionów. Nazwa regionu jest używana jako efektywna tożsamość.

Generowanie tokenu osadzania

Gdy wszystko będzie gotowe do osadzenia raportu w aplikacji, musisz wygenerować token osadzania. Aby wygenerować token przy użyciu interfejsu API tokenu osadzania, przekaż następujące informacje do interfejsu API.

  • nazwa użytkownika (wymagana) — jeśli role są dynamiczne, ciąg nazwy użytkownika jest używany jako filtr. W przypadku ról statycznych nazwa użytkownika nie ma wpływu na zabezpieczenia na poziomie wiersza i może być w ogóle dowolnym ciągiem. Na liście można wymienić tylko jedną nazwę użytkownika.
  • role (wymagane) — role używane podczas stosowania reguł zabezpieczeń na poziomie wiersza. W przypadku przekazywania więcej niż jednej roli należy przekazać je jako tablicę ciągów.
  • dataset (wymagane) — zestaw danych , który ma zastosowanie do osadzanych elementów.

Teraz możesz osadzić raport w aplikacji. Raport filtruje dane zgodnie z zastosowanym zabezpieczeniami na poziomie wiersza.

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

Rozważania i ograniczenia

  • W zależności od konfiguracji może być konieczne wykonanie kilku kroków przed wygenerowaniem tokenu osadzania. Aby uzyskać informacje na temat różnych scenariuszy, zobacz Osadzanie raportu korzystającego z funkcji zabezpieczeń.
  • Użytkownik, który generuje token osadzania, musi być członkiem lub administratorem w obu obszarach roboczych (obszarze roboczym zestawu danych i obszarze roboczym raportu).
  • Podczas generowania tokenu osadzania należy podać nazwę użytkownika i rolę. Jeśli tego nie zrobisz, wystąpi jedno z następujących zdarzeń, w zależności od tego, czy token jest generowany przez jednostkę usługi lub użytkownika głównego:
    • W przypadku jednostki usługi generowanie tokenu kończy się niepowodzeniem.
    • W przypadku użytkownika głównego generowanie tokenu kończy się powodzeniem, ale dane nie są filtrowane (zwracane są wszystkie dane).

Więcej pytań? Wypróbuj Społeczność usługi Power BI.