Incorporare un report con sicurezza a livello di riga

SI APPLICA A: L'app possiede dati di proprietà dell'utente

Questo articolo illustra come incorporare contenuto di Power BI che usa la sicurezza a livello di riga in un'applicazione dati di power BI standard.

Prerequisiti

Per una spiegazione dettagliata su come configurare la sicurezza a livello di riga, vedere Sicurezza a livello di riga con Power BI.

Quando si definiscono i ruoli di sicurezza a livello di riga, tenere presente che l'espressione DAX usata determina se il modello di sicurezza a livello di riga è statico o dinamico.

Quando usare la sicurezza statica e dinamica

La sicurezza statica usa un valore fisso nel filtro DAX per definire ogni ruolo. È semplice implementare ma difficile da gestire quando sono coinvolti molti utenti o organizzazioni.

La sicurezza statica funziona meglio per un ISV che serve uno o pochi grandi clienti in cui ogni reparto deve accedere a dati diversi.

La sicurezza dinamica usa una funzione DAX (username() o userprincipalname()) per definire i ruoli. La sicurezza dinamica offre maggiore flessibilità e consente di gestire i dati usando meno ruoli e meno manutenzione.

Sicurezza statica

Con i ruoli statici, si passa il ruolo a Power BI quando si genera un token di incorporamento e l'utente visualizza i dati in base a tale ruolo. Per creare ruoli di sicurezza statici, immettere un valore fisso nel filtro DAX.

Ad esempio, è possibile definire il ruolo degli Stati Uniti orientali come [Region] = "East"

Screenshot che mostra come definire un ruolo R L S statico.

Si supponga di john@contoso.com essere un utente dell'app. Si vuole concedere a John l'accesso ai dati dal ruolo Stati Uniti orientali. Per incorporare un report per john@contoso.com, generare un token di incorporamento usando il ruolo Stati Uniti orientali. I dati risultanti vengono filtrati per [Region] = "East".

Nota

Quando si genera il token di incorporamento, è necessario specificare un nome utente, ma il nome utente può essere qualsiasi stringa. I ruoli statici hanno un valore fisso che non dipende da un nome utente, quindi dopo che l'ISV determina il ruolo dell'utente e lo passa al token di incorporamento, i dati vengono filtrati in base a tale ruolo indipendentemente dal nome utente passato.

Sicurezza dinamica

La sicurezza dinamica usa la funzione DAX (username() o userprincipalname()) per definire il ruolo.

Nello scenario di dati proprietario dell'utente, il modello di sicurezza a livello di riga filtra automaticamente i dati in base ai ruoli dell'utente specifico. Con i dati di proprietà dell'app, Power BI non conosce i nomi utente dei clienti isv, quindi è possibile usare la username() funzione per filtrare in modo dinamico i dati.

Creare un ruolo in Power BI Desktop usando la funzione username(). Ad esempio, è possibile creare un ruolo denominato CountryDynamic e definirlo come [CountryRegionCode] = username()

Screenshot che mostra come creare un ruolo R L S dinamico.

Si supponga di voler assegnare all'utente, jane@contoso.com, l'accesso ai dati per la Francia. Quando si genera un token di incorporamento per jane@contoso.com, si passa la stringa France come nome utente nel ruolo CountryDynamic . I dati vengono filtrati in base a [CountryRegionCode] = Francia.

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

Quando si usa la sicurezza dinamica in questo scenario, è necessario un solo ruolo per tutte le aree. Il nome dell'area viene usato come identità effettiva.

Generare un token di incorporamento

Quando si è pronti per incorporare il report nell'app, è necessario generare un token di incorporamento. Per generare un token usando l'API embed token, passare le informazioni seguenti all'API.

  • username (obbligatorio): se i ruoli sono dinamici, la stringa del nome utente viene usata come filtro. Per i ruoli statici, il nome utente non influisce sulla sicurezza a livello di riga e può essere qualsiasi stringa. È possibile elencare solo un singolo nome utente.
  • roles (obbligatorio): i ruoli usati per l'applicazione delle regole di sicurezza a livello di riga. Se si passa più di un ruolo, è consigliabile passarli come matrice di stringhe.
  • set di dati (obbligatorio): set di dati applicabile per l'elemento che si sta incorporando.

È ora possibile incorporare il report nell'app. Il report filtra i dati in base alla sicurezza a livello di riga applicata.

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

Considerazioni e limitazioni

  • A seconda della configurazione, potrebbe essere necessario eseguire diversi passaggi prima di generare un token di incorporamento. Per informazioni sui diversi scenari, vedere Incorporare un report che usa le funzionalità di sicurezza.
  • L'utente che genera il token di incorporamento deve essere membro o amministratore in entrambe le aree di lavoro (l'area di lavoro del set di dati e l'area di lavoro del report).
  • Quando si genera il token di incorporamento, è necessario fornire un nome utente e un ruolo. In caso contrario, si verificherà uno degli eventi seguenti, a seconda che il token venga generato dall'entità servizio o dall'utente master:
    • Per un'entità servizio, la generazione del token ha esito negativo.
    • Per un utente master, la generazione di token ha esito positivo, ma i dati non vengono filtrati (vengono restituiti tutti i dati).

Altre domande? Provare il Community di Power BI.