Condividi tramite


Incorporare un report con sicurezza a livello di riga

SI APPLICA A: I dati sono di proprietà dell'app I dati sono di proprietà dell'utente

Questo articolo illustra come incorporare il contenuto di Power BI che usa la sicurezza a livello di riga in un'applicazione in cui i dati sono di proprietà dell’app di Power BI standard.

Prerequisiti

Per una spiegazione dettagliata su come configurare la sicurezza a livello di riga, vedere Sicurezza a livello di riga (RLS) 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. È facile da implementare, ma difficile da gestire quando sono coinvolti molti utenti o organizzazioni.

La sicurezza statica funziona meglio per un fornitore di software indipendente 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 di sicurezza a livello di riga statico.

Si supponga che john@contoso.com sia 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 tale nome può essere qualsiasi stringa. I ruoli statici hanno un valore fisso che non dipende da un nome utente, quindi dopo che il fornitore di software indipendente 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 I dati sono di proprietà dell'utente, il modello di sicurezza a livello di riga filtra automaticamente i dati in base ai ruoli dell'utente specifico. Con I dati sono di proprietà dell'app, Power BI non conosce i nomi utente dei clienti del fornitore di software indipendente, quindi è possibile usare la funzione username() per filtrare i dati in modo dinamico.

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

Screenshot che mostra come creare un ruolo di sicurezza a livello di riga 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 Francia 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 geografica 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 Token di incorporamento, passare le informazioni seguenti all'API.

  • nome utente (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 specificare solo un nome utente.
  • roli (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): il set di dati applicabile per l'elemento che verrà incorporato.

È 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 l'entità servizio, la generazione del token ha esito negativo.
    • Per l’utente master, la generazione di token ha esito positivo, ma i dati non vengono filtrati (vengono restituiti tutti i dati).

Altre domande? Provare la Community di Power BI.