Sdílet prostřednictvím


Vložení sestavy pomocí RLS

PLATÍ PRO: Aplikace vlastní data Uživatel vlastní data

Tento článek vysvětluje, jak vložit obsah Power BI, který používá zabezpečení na úrovni řádků (RLS) do standardní aplikace Power BI, která vlastní datovou aplikaci.

Požadavky

Podrobné vysvětlení, jak nastavit RLS, najdete v zabezpečení na úrovni řádků (RLS) s Power BI.

Při definování vašich rolí zabezpečení na úrovni řádků mějte na paměti, že výraz DAX, který použijete, určuje, jestli je model zabezpečení na úrovni řádků (RLS) statický nebo dynamický.

Kdy použít statické a dynamické zabezpečení

Statické zabezpečení používá pevnou hodnotu ve filtru DAX k definování jednotlivých rolí. Implementace je jednoduchá, ale obtížně se udržuje, pokud je zapojeno mnoho uživatelů nebo organizací.

Statické zabezpečení je nejvhodnější pro výrobce softwaru, který obsluhuje jednoho nebo několik velkých zákazníků, kde každé oddělení potřebuje přístup k různým datům.

Dynamické zabezpečení používá k definování rolí funkci DAX (username() nebo userprincipalname()). Dynamické zabezpečení poskytuje větší flexibilitu a umožňuje spravovat data pomocí menšího počtu rolí a menší údržby.

Statické zabezpečení

Se statickými rolemi předáte roli do Power BI při generování tokenu pro vložení a uživatel uvidí data podle této role. Pokud chcete vytvořit statické role zabezpečení, zadejte do filtru DAX pevnou hodnotu.

Můžete například definovat roli východní USA jako [Region] = "East"

Snímek obrazovky znázorňující, jak definovat statickou roli R L S

Řekněme, že john@contoso.com je uživatel vaší aplikace. Chcete Johnovi udělit přístup k datům z role Východní USA. Pokud chcete vložit sestavu pro john@contoso.com, vygenerujte token pro vložení pomocí role Východní USA . Výsledná data jsou filtrována pro [Region] = "East".

Poznámka:

Když vygenerujete token pro vložení, musíte zadat uživatelské jméno, ale uživatelské jméno může být libovolný řetězec. Statické role mají pevnou hodnotu, která není závislá na uživatelském jménu, takže jakmile nezávislý výrobce softwaru určí roli uživatele a předá ji tokenu pro vložení, data se filtrují podle této role bez ohledu na to, jaké uživatelské jméno bylo předáno.

Dynamické zabezpečení

Dynamické zabezpečení používá k definování role funkci DAX (username() nebo userprincipalname()).

V případě, že uživatel vlastní data , model RLS automaticky filtruje data na základě rolí konkrétního uživatele. V případě, že aplikace vlastní data, Power BI nezná uživatelská jména zákazníků nezávislých výrobců softwaru, takže funkci můžete použít username() k dynamickému filtrování dat.

Vytvořte v Power BI Desktopu roli pomocí funkce username(). Můžete například vytvořit roli s názvem CountryDynamic a definovat ji jako [CountryRegionCode] = username()

Snímek obrazovky znázorňující, jak vytvořit dynamickou roli R L S

Řekněme, jane@contoso.comže chcete uživateli udělit přístup k datům pro Francii. Když vygenerujete token jane@contoso.com pro vložení, předáte řetězec Francie jako uživatelské jméno v rámci role CountryDynamic. Vaše data se filtrují podle hodnoty [CountryRegionCode] = Francie.

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

Při použití dynamického zabezpečení v tomto scénáři potřebujete jenom jednu roli pro všechny oblasti. Název oblasti se používá jako efektivní identita.

Vygenerování tokenu pro vložení

Až budete připraveni vložit sestavu do aplikace, musíte vygenerovat token pro vložení. Pokud chcete vygenerovat token pomocí rozhraní API pro vložení tokenu, předejte do rozhraní API následující informace.

  • username (required) – Pokud jsou role dynamické, použije se jako filtr řetězec uživatelského jména . U statických rolí uživatelské jméno nemá vliv na zabezpečení na úrovni řádků a může to být libovolný řetězec. Je možné uvést pouze jedno uživatelské jméno.
  • role (povinné) – role používané při použití pravidel zabezpečení na úrovni řádků. Předáváte-li více než jednu roli, měly by být předány jako pole řetězců.
  • datová sada (povinné) – datová sada, která se vztahuje na položku, kterou vkládáte.

Sestavu teď můžete vložit do vaší aplikace. Sestava filtruje data podle použitého RLS (zabezpečení na úrovni řádků).

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

Úvahy a omezení

  • V závislosti na nastavení možná budete muset před vygenerováním tokenu pro vložení provést několik kroků. Informace o různých scénářích najdete v tématu Vložit sestavu, která používá bezpečnostní prvky.
  • Uživatel, který vygeneruje token pro vložení, musí být členem nebo správcem v obou pracovních prostorech (v pracovním prostoru datové sady a pracovním prostoru sestavy).
  • Při generování tokenu pro vložení musíte zadat uživatelské jméno a roli. Pokud tak neučiníte, nastane jedna z následujících událostí v závislosti na tom, jestli je token generován službou principal nebo hlavním uživatelem.
    • V případě principálu služby se generování tokenu nezdaří.
    • Pro hlavního uživatele bude generování tokenů úspěšné, ale data se nefiltrují (všechna data se vrátí).

Další otázky? Zkuste Komunita Power BI.