Sicurezza a livello di riga con Power BI EmbeddedRow-level security with Power BI Embedded

Questa pagina è stata utile?

La sicurezza a livello di riga può essere usata per limitare l'accesso degli utenti ai dati in dashboard, riquadri, report e set di dati.Row-level security (RLS) can be used to restrict user access to data within dashboards, tiles, reports, and datasets. Utenti diversi possono usare gli stessi artefatti visualizzando al tempo stesso dati diversi.Different users can work with those same artifacts all while seeing different data. L'incorporamento supporta la sicurezza a livello di riga.Embedding supports RLS.

Se si incorporano dati per utenti non Power BI (i dati sono di proprietà dell'app), ovvero un tipico scenario ISV, leggere questo articolo.If you're embedding for non-Power BI users (app owns data), which is typically an ISV scenario, then this article is for you! Configurare il token di incorporamento per l'utente e il ruolo.Configure the embed token to account for the user and role.

Se l'incorporamento viene eseguito per utenti di Power BI (i dati sono di proprietà dell'utente) all'interno dell'organizzazione, la sicurezza a livello di riga funziona esattamente come nel servizio Power BI.If you're embedding to Power BI users (user owns data), within your organization, RLS works the same as it does within the Power BI service directly. Non è necessario eseguire altre operazioni nell'applicazione.There's nothing more you need to do in your application. Per altre informazioni, vedere Sicurezza a livello di riga con Power BI.For more information, see Row-Level security (RLS) with Power BI.

Elementi coinvolti con la sicurezza a livello di riga.

Per sfruttare al meglio la sicurezza a livello di riga, è importante comprendere tre concetti fondamentali, ovvero utenti, ruoli e regole,To take advantage of RLS, it’s important you understand three main concepts; Users, Roles, and Rules. che verranno ora analizzati più in dettaglio:Let’s take a closer look at each:

Utenti: gli utenti finali visualizzano l'elemento (dashboard, riquadro, report o set di dati).Users – End users viewing the artifact (dashboard, tile, report, or dataset). In Power BI Embedded gli utenti vengono identificati tramite la proprietà username in un token di incorporamento.In Power BI Embedded, users are identified by the username property in an embed token.

Ruoli: gli utenti appartengono a ruoli.Roles – Users belong to roles. Un ruolo è un contenitore di regole e può essergli assegnato un nome simile a Responsabile vendite o Rappresentante vendite. I ruoli vengono creati in Power BI Desktop.A role is a container for rules and can be named something like Sales Manager or Sales Rep. You create roles within Power BI Desktop. Per altre informazioni, vedere Sicurezza a livello di riga con Power BI Desktop.For more information, see Row-level security (RLS) with Power BI Desktop.

Regole: i ruoli contengono regole e tali regole costituiscono i filtri effettivi che verranno applicati ai dati.Rules – Roles have rules, and those rules are the actual filters that are going to be applied to the data. Le regole possono essere semplici, ad esempio "Paese = USA", oppure molto più dinamiche.The rules could be as simple as “Country = USA” or something much more dynamic. La parte rimanente di questo articolo offre un esempio di creazione di sicurezza a livello di riga e del relativo utilizzo in un'applicazione incorporata.For the rest of this article, there's an example of authoring RLS, and then consuming that within an embedded application. In questo esempio viene usato il file PBIX Retail Analysis Sample.Our example uses the Retail Analysis Sample PBIX file.

Esempio di report

Aggiunta di ruoli con Power BI DesktopAdding roles with Power BI Desktop

L'esempio Retail Analysis mostra le vendite per tutti i negozi di una catena specifica.Our Retail Analysis sample shows sales for all the stores in a retail chain. Senza sicurezza a livello di riga, tutti i responsabili di area che accedono al report visualizzano gli stessi dati.Without RLS, no matter which district manager signs in and views the report, they all see the same data. I dirigenti hanno stabilito che ogni responsabile di area debba visualizzare solo le vendite dei negozi che gestisce.Senior management has determined each district manager should only see the sales for the stores they manage. La sicurezza a livello di riga consente ai dirigenti di limitare i dati in base a un responsabile di area.Using RLS allows Senior management to restrict data based on a district manager.

La sicurezza a livello di riga viene creata in Power BI Desktop.RLS is authored in Power BI Desktop. All'apertura del set di dati e del report, è possibile passare alla visualizzazione diagramma per visualizzare lo schema:When the dataset and report are opened, we can switch to diagram view to see the schema:

Visualizzazione diagramma in Power BI Desktop

Alcuni aspetti da notare in questo schema:Here are a few things to notice with this schema:

  • Tutte le misure, ad esempio Total Sales, sono archiviate nella tabella dei fatti Sales.All measures, like Total Sales, are stored in the Sales fact table.

  • Sono presenti altre quattro tabelle delle dimensioni correlate: Item, Time, Store e District.There are four additional related dimension tables: Item, Time, Store, and District.

  • Le frecce sulle linee delle relazioni indicano la direzione in cui i filtri possono essere applicati da una tabella all'altra.The arrows on the relationship lines indicate which way filters can flow from one table to another. Ad esempio, se un filtro è posizionato su Time[Date] , nello schema corrente verrebbero filtrati solo i valori presenti nella tabella Sales.For example, if a filter is placed on Time[Date], in the current schema it would only filter down values in the Sales table. Questo filtro non influisce su altre tabelle, perché tutte le frecce sulle linee relative alle relazioni fanno riferimento alla tabella Sales, non ad altre tabelle.No other tables are affected by this filter since all the arrows on the relationship lines point to the sales table and not away.

  • La tabella District indica il responsabile per ogni area:The District table indicates who the manager is for each district:

    Righe all'interno della tabella District

In base a questo schema, se si applica un filtro alla colonna District Manager nella tabella District e se tale filtro corrisponde all'utente che visualizza il report, vengono filtrate anche le tabelle Store e Sales per visualizzare i dati relativi al responsabile di area specifico.Based on this schema, if we apply a filter to the District Manager column in the District table, and if that filter matches the user viewing the report, that filter down the Store and Sales tables to show data for that district manager.

Ecco come:Here's how:

  1. Nella scheda Creazione di modelli selezionare Gestisci ruoli.On the Modeling tab, select Manage Roles.

    Scheda Creazione di modelli in Power BI Desktop

  2. Creare un nuovo ruolo denominato Manager.Create a new role called Manager.

    Crea nuovo ruolo

  3. Nella tabella District immettere questa espressione DAX: [District Manager] = USERNAME() .In the District table, enter this DAX expression: [District Manager] = USERNAME().

    Istruzione DAX per la regola di sicurezza a livello di riga

  4. Per verificare che le regole funzionino correttamente, nella scheda Creazione di modelli selezionare Visualizza come ruoli e quindi il ruolo Manager creato, insieme ad Altri utenti.To make sure the rules are working, on the Modeling tab, select View as Roles, and then select both the Manager role you created, along with Other users. Per l'utente, immettere AndrewMa.Enter AndrewMa for the user.

    Finestra di dialogo Visualizza come ruoli

    Nei report vengono visualizzati i dati come se l'accesso fosse stato eseguito come AndrewMa.The reports show data as if you're signed in as AndrewMa.

Applicando il filtro, come in questa procedura, vengono filtrati tutti i record nelle tabelle District, Store e Sales.Applying the filter, the way we did here, filters down all records in the District, Store, and Sales tables. Tuttavia, a causa della direzione del filtro sulle relazioni tra le tabelle Sales e Time e Sales e Item, le tabelle Item e Time non vengono filtrate.However, because of the filter direction on the relationships between Sales and Time, Sales and Item, and Item and Time tables aren't filtered down. Per altre informazioni sui filtri incrociati bidirezionali, scaricare il white paper Bidirectional cross-filtering in SQL Server Analysis Services 2016 and Power BI Desktop (Filtri incrociati bidirezionali in SQL Server Analysis Services 2016 e Power BI Desktop).To learn more about bidirectional cross-filtering, download the Bidirectional cross-filtering in SQL Server Analysis Services 2016 and Power BI Desktop whitepaper.

Applicazione di utente e ruolo a un token di incorporamentoApplying user and role to an embed token

A questo punto, dopo aver configurato i ruoli di Power BI Desktop, per usare i ruoli è necessario eseguire alcune operazioni nell'applicazione.Now that you have your Power BI Desktop roles configured, there's some work needed in your application to take advantage of the roles.

Gli utenti vengono autenticati e autorizzati dall'applicazione e i token di incorporamento vengono usati per concedere l'accesso utente a un report specifico di Power BI Embedded.Users are authenticated and authorized by your application and embed tokens are used to grant that user access to a specific Power BI Embedded report. Power BI Embedded non ha informazioni specifiche sull'identità dell'utente.Power BI Embedded doesn’t have any specific information on who your user is. Per il corretto funzionamento della sicurezza a livello di riga, è necessario passare altre informazioni del contesto come parte del token di incorporamento sotto forma di identità.For RLS to work, you need to pass some additional context as part of your embed token in the form of identities. È possibile passare le identità usando l'API Token di incorporamento.You can pass the identities by using the Embed Token API.

L'API accetta un elenco di identità con l'indicazione dei set di dati pertinenti.The API accepts a list of identities with indication of the relevant datasets. Per il corretto funzionamento della sicurezza a livello di riga, è necessario passare quanto segue come parte dell'identità.For RLS to work, you need to pass the below pieces as part of the identity.

  • username (obbligatorio) : stringa che può semplificare l'identificazione dell'utente quando si applicano le regole di sicurezza a livello di riga.username (mandatory) – A string that can be used to help identify the user when applying RLS rules. È possibile specificare solo un utente.Only a single user can be listed. Il nome utente può essere creato con i caratteri ASCII.Your username can be created with ASCII characters.
  • roles (obbligatoria) : stringa contenente i ruoli da selezionare quando si applicano le regole di sicurezza a livello di riga.roles (mandatory) – A string containing the roles to select when applying Row Level Security rules. Se si passa più di un ruolo, sarà necessario passarli come matrice di stringhe.If passing more than one role, they should be passed as a string array.
  • dataset (obbligatorio) : set di dati applicabile per l'artefatto che verrà incorporato.dataset (mandatory) – The dataset that is applicable for the artifact you're embedding.

Per creare il token di incorporamento, usare il metodo GenerateTokenInGroup su PowerBIClient.Reports.You can create the embed token by using the GenerateTokenInGroup method on PowerBIClient.Reports.

È ad esempio possibile modificare l'esempio PowerBIEmbedded_AppOwnsData.For example, you could change the PowerBIEmbedded_AppOwnsData sample. Le righe 76 e 77 di Services\EmbedService.cs potrebbero essere modificate da:Services\EmbedService.cs line 76 and 77 could be updated from:

// Generate Embed Token.
var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");

var tokenResponse = await client.Reports.GenerateTokenInGroupAsync(GroupId, report.Id, generateTokenRequestParameters);

toto

var generateTokenRequestParameters = new GenerateTokenRequest("View", null, identities: new List<EffectiveIdentity> { new EffectiveIdentity(username: "username", roles: new List<string> { "roleA", "roleB" }, datasets: new List<string> { "datasetId" }) });

var tokenResponse = await client.Reports.GenerateTokenInGroupAsync("groupId", "reportId", generateTokenRequestParameters);

Se si chiama l'API REST, l'API aggiornata ora accetta una matrice JSON aggiuntiva, denominata identities, contenente un nome utente, un elenco dei ruoli stringa e un elenco di set di dati stringa.If you're calling the REST API, the updated API now accepts an additional JSON array, named identities, containing a username, list of string roles and list of string datasets.

Usare il codice seguente come esempio:Use the following code below as an example:

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

Ora, dopo aver eseguito tutti i passaggi, quando un utente effettua l'accesso all'applicazione per visualizzare questo artefatto, potrà visualizzare solo i dati che è autorizzato a vedere, come definito dalla sicurezza a livello di riga.Now, with all the pieces together, when someone logs into your application to view this artifact, they’ll only see the data that they're allowed to see, as defined by our row-level security.

Uso di connessioni dinamiche ad Analysis ServicesWorking with Analysis Services live connections

La sicurezza a livello di riga può essere usata solo con le connessioni in tempo reale di Analysis Services per i server locali.Row-level security can be used with Analysis Services live connections for on-premises servers. Esistono alcuni concetti specifici che è bene conoscere quando si usa questo tipo di connessione.There are a few specific concepts that you should understand when using this type of connection.

L'identità effettiva specificata per la proprietà username deve essere un utente di Windows con autorizzazioni per il server Analysis Services.The effective identity that is provided for the username property must be a Windows user with permissions on the Analysis Services server.

Configurazione del gateway dati localeOn-premises data gateway configuration

Un gateway dati locale viene usato quando si lavora con connessioni dinamiche di Analysis Services.An On-premises data gateway is used when working with Analysis Services live connections. Quando si genera un token di incorporamento, con un'identità elencata, l'account principale deve essere elencato come amministratore del gateway.When generating an embed token, with an identity listed, the master account needs to be listed as an admin of the gateway. Se l'account master non è elencato, la sicurezza a livello di riga non viene applicata correttamente alla proprietà dei dati.If the master account isn't listed, the row-level security isn't applied to the property of the data. Chi non è amministratore del gateway può fornire i ruoli, ma deve specificare il proprio nome utente per l'identità effettiva.A non-admin of the gateway can provide roles, but must specify its own username for the effective identity.

Uso dei ruoliUse of roles

I ruoli possono essere forniti con l'identità in un token di incorporamento.Roles can be provided with the identity in an embed token. Se non vengono forniti ruoli, il nome utente fornito può essere usato per risolvere i ruoli associati.If no role is provided, the username that was provided can be used to resolve the associated roles.

Uso della funzionalità CustomDataUsing the CustomData feature

La funzionalità CustomData può essere usata solo per i modelli presenti in Azure Analysis Services e solo in modalità Connessione dinamica.The CustomData feature only works for models that lie in Azure Analysis Services, and it only works in Connect live mode. Diversamente da utenti e ruoli, la funzionalità CustomData non può essere impostata in un file con estensione pbix.Unlike users and roles, the Custom data feature can't be set inside a .pbix file. Quando si genera un token con la funzionalità CustomData, è necessario avere un nome utente.When generating a token with the Custom data feature, you need to have a username.

La funzionalità CustomData consente di aggiungere un filtro di riga quando si visualizzano i dati di Power BI nell'applicazione quando si usa Azure Analysis Services come origine dati (visualizzazione dei dati di Power BI connessi ad Azure Analysis Services all'interno dell'applicazione ).The CustomData feature allows you to add a Row filter when viewing Power BI data in your application when using Azure Analysis Services as your data source (viewing Power BI data connected to Azure Analysis Services in your application).

La funzionalità CustomData consente di passare testo libero (stringa) usando la proprietà della stringa di connessione CustomData.The CustomData feature allows passing free text (string) using the CustomData connection string property. Analysis Services usa questo valore tramite la funzione CUSTOMDATA() .Analysis Services use this value via the CUSTOMDATA() function.

L'unico modo per usare la sicurezza a livello di riga dinamica (che usa valori dinamici per la valutazione del filtro) in Azure Analysis Services consiste nell'usare la funzione CUSTOMDATA() .The only way to have dynamic RLS (which uses dynamic values for filter evaluation) in Azure Analysis Services, is using the CUSTOMDATA() function.

È possibile usarla nella query DAX del ruolo, ma anche senza ruoli in una query DAX di misura.You can use it inside the role DAX query, and you can use it without any role in a measure DAX query. CustomData fa parte della funzionalità di generazione del token per gli elementi seguenti: dashboard, report e riquadro.CustomData feature is part of our token generation functionality for the following artifacts: dashboard, report, and tile. I dashboard possono avere più identità CustomData (una per riquadro/modello).Dashboards can have multiple CustomData identities (one per tile/model).

Aggiunte di CustomData SDKCustomData SDK Additions

La proprietà stringa CustomData è stata aggiunta all'identità effettiva nello scenario di generazione del token.The CustomData string property was added to our effective identity in the token generation scenario.

[JsonProperty(PropertyName = "customData")]
public string CustomData { get; set; }

L'identità può essere creata con i dati personalizzati usando la chiamata seguente:The identity can be created with custom data using the following call:

public EffectiveIdentity(string username, IList<string> datasets, IList<string> roles = null, string customData = null);

Utilizzo di CustomData SDKCustomData SDK Usage

Se si chiama l'API REST, è possibile aggiungere i dati personalizzati in ogni identità, ad esempio:If you're calling the REST API, you can add custom data inside each identity, for example:

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "EffectiveIdentity",
            "roles": [ "Role1", "Role2" ],
            "customData": "MyCustomData",
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

La procedura seguente descrive come iniziare a configurare la funzionalità CustomData() con l'applicazione Power BI Embedded.Here are the steps to begin setting up the CustomData() feature with your Power BI Embedded application.

  1. Creare il database di Azure Analysis Services.Create your Azure Analysis Services database. Accedere quindi al server Azure Analysis Services tramite SQL Server Management Studio.Then sign in to your Azure Analysis Services server via SQL Server Management Studio.

    Creare un database di Azure Analysis Services

    Database di Analysis Services

  2. Creare un ruolo nel server Analysis Services.Create a Role in the Analysis Services server.

    Creazione del ruolo

  3. Impostare le opzioni Generale.Set your General settings. Assegnare Nome ruolo e impostare le autorizzazioni del database solo su Lettura.Here you give the Role Name and set the database permissions to Read only.

    Creazione del ruolo - Impostazioni generali

  4. Impostare le opzioni Appartenenza.Set the Membership settings. In questa sezione si aggiungono gli utenti a cui viene applicato questo ruolo.Here you add te users that are affected by this role.

    Creazione del ruolo - Impostazioni di appartenenza

  5. Impostare la query DAX in Filtri di riga usando la funzione CUSTOMDATA() .Set your Row filters DAX query using the CUSTOMDATA() function.

    Creazione del ruolo - Impostazione dei filtri di riga

  6. Creare un report Power BI e pubblicarlo in un'area di lavoro con capacità dedicata.Build a PBI report and publish it to a workspace with dedicated capacity.

    Esempio di report Power BI

  7. Usare le API Power BI per usare la funzionalità CustomData nell'applicazione.Use the Power BI APIs to use the CustomData feature in your application. Quando si genera un token con la funzionalità CustomData, è necessario avere un nome utente.When generating a token with the Custom data feature, you need to have a username. Il nome utente deve essere uguale all'UPN dell'utente master.The username must be equal to the UPN of the master user. L'utente master deve essere un membro dei ruoli creati.The master user must be a member of the role(s) you created. Se non viene specificato alcun ruolo, per la valutazione della sicurezza a livello di riga vengono usati tutti i ruoli di cui è membro l'utente master.If no role(s) are specified, then all the roles the master user is a member of are used for RLS evaluation.

    Quando si lavora con un'entità servizio, è necessario eseguire anche i passaggi precedenti al posto di usare un account master.When working with a service principal, you also need to do the above steps in place of using a master account. Durante la generazione di un token di incorporamento, usare l'ID oggetto entità servizio come nome utente.When generating embed token, use the service principal object ID as the username.

    Nota

    Quando si è pronti per distribuire l'applicazione nell'ambiente di produzione, il campo o l'opzione dell'account dell'utente master non deve essere visibile per l'utente finale.When you're ready to deploy your application to production, the master user account field or option should not be visible to the end user.

    Visualizzare il codice per aggiungere la funzionalità CustomData.View the code to add the CustomData feature.

  8. A questo punto è possibile visualizzare il report nell'applicazione prima di applicare i valori di CustomData per vedere tutti i dati contenuti nel report.Now you can view the report in your application before applying the Custom data value(s) to see all the data your report holds.

    Prima dell'applicazione di CustomData

    Applicare quindi i valori di CustomData per vedere come il report visualizza un diverso set di dati.Then apply the Custom data value(s) to see how the report displays a different set of data. Dopo l'applicazione di CustomDataAfter CustomData is applied

Uso della sicurezza a livello di riga o dei filtri JavaScript. Filtri JavaScriptUsing RLS vs. JavaScript filters

Per l'applicazione di filtri ai dati in un report, è possibile decidere di usare la sicurezza a livello di riga oppure filtri JavaScript.When deciding on filtering your data in a report, you can use row-level security (RLS) or JavaScript filters.

La sicurezza a livello di riga è una funzionalità che consente di filtrare i dati al livello del modello di dati.Row-level security is a feature that filters data at the data model level. L'origine dati back-end consente di controllare le impostazioni della sicurezza a livello di riga.Your backend data source controls your RLS settings. In base al modello di dati, la generazione del token di incorporamento imposta il nome utente e i ruoli per la sessione.Based on your data model, the embed token generation sets the username and the roles for the session. Non può essere sottoposta a override, rimossa o controllata da codice sul lato client e per tale motivo è considerata sicura.It cannot be overridden, removed, or controlled by the client-side code and that’s why it’s considered secure. È consigliabile usare la sicurezza a livello di riga per filtrare i dati in modo sicuro.We recommend using RLS for filtering data securely. È possibile filtrare i dati con la sicurezza a livello di riga usando una delle opzioni seguenti.You can filter data with RLS by using one of the options below.

  • Configurazione dei ruoli in un report di Power BI.Configuring roles in a Power BI report.
  • Configurazione dei ruoli a livello di origine dati (solo connessione dinamica ad Analysis Services).Configuring roles at the data source level (Analysis Services live connection only).
  • A livello di codice con un token di incorporamento usando EffectiveIdentity.Programmatically with an Embed Token using EffectiveIdentity. Quando si usa un token di incorporamento, il filtro effettivo passa attraverso il token di incorporamento per una specifica sessione.When using an embed token, the actual filter passes through the embed token for a specific session.

I filtri JavaScript vengono usati per consentire all'utente di utilizzare una vista ridotta, con ambito o filtrata dei dati.JavaScript filters are used to allow the user to consume reduced, scoped, or a filtered view of the data. Tuttavia, l'utente ha comunque accesso alle tabelle, alle colonne e alle misure dello schema del modello e può potenzialmente accedere ai dati presenti.However, the user still has access to the model schema tables, columns, and measures and potentially can access any data there. L'accesso limitato ai dati può essere applicato solo con la sicurezza a livello di riga e non tramite API di filtro sul lato client.Restricted access to the data can only be applied with RLS and not through client-side filtering APIs.

Identità basata su token con il database SQL di Azure (anteprima)Token-based Identity with Azure SQL Database (Preview)

L'identità basata su token consente di specificare l'identità effettiva per un token di incorporamento usando il token di accesso di Azure Active Directory (AAD) per un database SQL di Azure.The token-based identity allows you to specify the effective identity for an embed token using Azure Active Directory (AAD) access token for an Azure SQL Database.

I clienti che mantengono i dati nel database SQL di Azure possono ora sfruttare una nuova funzionalità per gestire gli utenti e l'accesso ai dati in SQL di Azure nell'integrazione con Power BI Embedded.Customers that hold their data in Azure SQL Database can now enjoy a new capability to manage users and their access to data in Azure SQL when integrating with Power BI Embedded.

Quando si genera il token di incorporamento, è possibile specificare l'identità effettiva di un utente in SQL di Azure.When you're generating the embed token, you can specify the effective identity of a user in Azure SQL. È possibile specificare l'identità effettiva di un utente passando il token di accesso AAD al server.You can specify the effective identity of a user by passing the AAD access token to the server. Il token di accesso viene usato per eseguire il pull solo dei dati rilevanti per l'utente da SQL di Azure, per la sessione specifica.The access token is used to pull only the relevant data for that user from Azure SQL, for that specific session.

Può essere usato per gestire la visualizzazione di ogni utente in SQL di Azure o per accedere a SQL di Azure come un cliente specifico in un database multi-tenant.It can be used to manage each user’s view in Azure SQL or to sign in to Azure SQL as a specific customer in a multi-tenant DB. Può anche applicare la sicurezza a livello di riga in tale sessione in Azure SQL e recuperare solo i dati pertinenti per la sessione, eliminando la necessità di gestire la sicurezza a livello di riga in Power BI.It can also apply row-level security on that session in Azure SQL and retrieve only the relevant data for that session, removing the need to manage RLS in Power BI.

Questi problemi di identità effettiva si applicano alle regole di sicurezza a livello di riga direttamente in SQL Server di Azure.Such effective identity issues apply to RLS rules directly on the Azure SQL Server. Power BI Embedded usa il token di accesso fornito durante l'esecuzione di query sui dati da SQL Server di Azure.Power BI Embedded uses the provided access token when querying data from the Azure SQL Server. L'UPN dell'utente (per il quale è stato fornito il token di accesso) è accessibile come risultato della funzione SQL USER_NAME().The UPN of the user (for which the access token was provided) is accessible as a result of the USER_NAME() SQL function.

L'identità basata su token funziona solo per i modelli DirectQuery su capacità dedicata, connessa a un database SQL di Azure configurato per consentire l'autenticazione di AAD (altre informazioni sull'autenticazione di AAD per il database SQL di Azure).The token-based identity only works for DirectQuery models on dedicated capacity - connected to an Azure SQL Database, which is configured to allow AAD authentication (learn more about AAD authentication for Azure SQL Database). L'origine dati del set di dati deve essere configurata per usare le credenziali OAuth2 degli utenti finali, per usare un'identità basata su token.The dataset’s data source must be configured to use end users’ OAuth2 credentials, to use a token-based identity.

Configurare SQL Server di Azure

Aggiunte dell'SDK per l'identità basata su tokenToken-based Identity SDK additions

La proprietà IdentityBlob è stata aggiunta all'identità effettiva nello scenario di generazione del token.The identity blob property was added to our effective identity in the token generation scenario.

[JsonProperty(PropertyName = "identityBlob")]
public IdentityBlob IdentityBlob { get; set; }

Il tipo IdentityBlob è una struttura JSON semplice che contiene una proprietà stringa di valoreThe IdentityBlob type is a simple JSON structure holding a value string property

[JsonProperty(PropertyName = "value")]
public string value { get; set; }

EffectiveIdentity può essere creata con IdentityBlob usando la chiamata seguente:The EffectiveIdentity can be created with identity blob using the following call:

public EffectiveIdentity(string username, IList<string> datasets, IList<string> roles = null, string customData = null, IdentityBlob identityBlob = null);

La proprietà IdentityBlob può essere creata tramite la chiamata seguente.Identity blob can be created using the following call.

public IdentityBlob(string value);

Utilizzo dell'API REST per l'identità basata su tokenToken-based Identity REST API Usage

Se si chiama l'API REST, è possibile aggiungere BLOB di identità all'interno di ogni identità.If you're calling the REST API, you can add identity blob inside each identity.

{
    "accessLevel": "View",
    "identities": [
        {
            "datasets": ["fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc"],
        “identityBlob”: {
            “value”: “eyJ0eXAiOiJKV1QiLCJh….”
         }
        }
    ]
}

Il valore specificato nel BLOB di identità deve essere un token di accesso valido per SQL Server di Azure (con un URL di risorsa (https://database.windows.net/).The value provided in the identity blob should be a valid access token to Azure SQL Server (with a resource URL of (https://database.windows.net/).

Nota

Per poter creare un token di accesso per SQL di Azure, l'applicazione deve avere autorizzazioni delegate per l'accesso a database SQL di Azure e ad Azure Data Warehouse per l'API di database SQL di Azure nella configurazione di registrazione dell'app AAD nel portale di Azure.To be able to create an access token for Azure SQL, the application must have Access Azure SQL DB and Data Warehouse delegated permission to Azure SQL Database API on AAD app registration configuration in the Azure portal.

Registrazione dell'app

Gateway dati locale con entità servizioOn-premises data gateway with service principal

I clienti che configurano la sicurezza a livello di riga mediante un'origine dati con connessione dinamica locale SQL Server Analysis Services (SSAS) possono usare la nuova funzionalità entità servizio per la gestione degli utenti e del loro accesso ai dati in SSAS, nel contesto dell'integrazione con Power BI Embedded.Customers that configure row-level security (RLS) using an SQL Server Analysis Services (SSAS) on-premises live connection data source can enjoy the new service principal capability to manage users and their access to data in SSAS when integrating with Power BI Embedded.

Usando le API REST di Power BI è possibile specificare l'identità effettiva per le connessioni dinamiche locali SSAS per un token di incorporamento usando un oggetto entità servizio.Using Power BI REST APIs, allows you to specify the effective identity for SSAS on-premises live connections for an embed token using a service principal object.

Fino ad ora, per la specifica dell'identità effettiva della connessione dinamica locale SSAS, l'utente master che generava il token di incorporamento doveva essere un amministratore del gateway. Ora non è più obbligatorio che l'utente sia un amministratore del gateway, e per contro l'amministratore del gateway può concedere all'utente autorizzazioni dedicate per l'origine dati specifica. In tal modo l'utente può eseguire l'override dell'identità effettiva durante la generazione del token di incorporamento.Until now, to be able to specify the effective identity for SSAS on-premises live connection, the master user generating the embed token had to be a gateway admin. Now, instead of requiring the user to be gateway admin, the gateway admin can give the user dedicated permission to that data source, that allows the user to override the effective identity when generating the embed token. Questa nuova funzionalità consente l'incorporamento con l'entità servizio per una connessione dinamica SSAS.This new ability enables embedding with service principal for a live SSAS connection.

Per abilitare questo scenario, l'amministratore del gateway usa l'API REST Add Datasource User (Aggiungi utente origine dati) per garantire all'entità servizio l'autorizzazione ReadOverrideEffectiveIdentity per Power BI Embedded.To enable this scenario, the gateway admin uses the Add Datasource User REST API to give the service principal the ReadOverrideEffectiveIdentity permission for Power BI Embedded.

Non è possibile impostare questa autorizzazione tramite il portale di amministrazione.You can't set this permission using the admin portal. Questa autorizzazione può essere impostata solo tramite l'API.This permission is only set with the API. Nel portale di amministrazione viene visualizzata un'indicazione per utenti e SPN con queste autorizzazioni.In the admin portal, you see an indication for users and SPNs with such permissions.

Considerazioni e limitazioniConsiderations and limitations

  • L'assegnazione di utenti ai ruoli, all'interno del servizio Power BI, non influisce sulla sicurezza a livello di riga quando si usa un token di incorporamento.Assignment of users to roles within the Power BI service doesn't affect RLS when using an embed token.
  • Il servizio Power BI non applica l'impostazione di sicurezza a livello di riga agli amministratori o ai membri con autorizzazioni di modifica, ma quando si fornisce un'identità con un token di incorporamento, l'impostazione viene applicata ai dati.While the Power BI service doesn't apply RLS setting to admins or members with edit permissions, when you supply an identity with an embed token, it applies to the data.
  • Sono supportate le connessioni dinamiche ad Analysis Services per i server locali.Analysis Services live connections are supported for on-premises servers.
  • Le connessioni dinamiche di Azure Analysis Services supportano i filtri in base al ruolo.Azure Analysis Services live connections support filtering by roles. È possibile applicare filtri dinamici usando CustomData.Dynamic filtering can be done using CustomData.
  • Se il set di dati sottostante non richiede la sicurezza a livello di riga, la richiesta GenerateToken non deve contenere un'identità effettiva.If the underlying dataset doesn’t require RLS, the GenerateToken request must not contain an effective identity.
  • Se il set di dati sottostante è un modello cloud (modello memorizzato nella cache o DirectQuery), l'identità effettiva deve includere almeno un ruolo; in caso contrario, l'assegnazione ruolo non viene eseguita.If the underlying dataset is a cloud model (cached model or DirectQuery), the effective identity must include at least one role, otherwise role assignment doesn't occur.
  • Un elenco di identità consente più token di identità per l'incorporamento del dashboard.A list of identities enables multiple identity tokens for dashboard embedding. Per tutti gli altri elementi l'elenco contiene una singola identità.For all others artifacts, the list contains a single identity.

Limitazioni per l'identità basata su token (anteprima)Token-based Identity limitations (Preview)

  • L'uso di questa funzionalità è limitato a Power BI Premium.This capability restricts use with Power BI Premium only.
  • Questa funzionalità non funziona con SQL Server in locale.This capability doesn’t work with SQL Server on-premises.
  • Questa funzionalità non funziona con Multi-Geo.This capability doesn't work with multi-geo.

Altre domande?More questions? Provare a rivolgersi alla community di Power BITry asking the Power BI Community