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"
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()
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).
Contenuto correlato
Altre domande? Provare la Community di Power BI.