Sécurité au niveau des lignes avec Power BI EmbeddedRow-level security with Power BI Embedded

La sécurité au niveau des lignes peut être utilisée pour restreindre l’accès aux données dans des tableaux de bord, vignettes, rapports et jeux de données.Row-level security (RLS) can be used to restrict user access to data within dashboards, tiles, reports, and datasets. Différents utilisateurs peuvent travailler sur ces mêmes artefacts tout en voyant des données différentes.Different users can work with those same artifacts all while seeing different data. L’incorporation prend en charge la sécurité au niveau des lignes.Embedding supports RLS.

Si vous incorporez un rapport pour les utilisateurs non-Power BI (l’application possède les données), en général un scénario ISV, cet article est fait pour vous.If you're embedding for non-Power BI users (app owns data), which is typically an ISV scenario, then this article is for you! Configurez le jeton d’incorporation pour prendre en compte l’utilisateur et le rôle.Configure the embed token to account for the user and role.

Si vous incorporez des rapports pour des utilisateurs Power BI (l’utilisateur possède les données) au sein de votre organisation, la sécurité au niveau des lignes fonctionne de la même façon que dans le service Power BI directement.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. Il n’y a rien de plus à faire dans votre application.There's nothing more you need to do in your application. Pour plus d’informations, consultez Sécurité au niveau des lignes avec Power BI.For more information, see Row-Level security (RLS) with Power BI.

Éléments impliqués dans la sécurité au niveau des lignes.

Pour tirer parti de la sécurité au niveau des lignes, il est important de comprendre trois principaux concepts : les utilisateurs, les rôles et les règles.To take advantage of RLS, it’s important you understand three main concepts; Users, Roles, and Rules. Examinons plus en détail ces concepts :Let’s take a closer look at these concepts:

Utilisateurs : utilisateurs finaux qui voient l’artefact (tableau de bord, vignette, rapport ou jeu de données).Users – End users viewing the artifact (dashboard, tile, report, or dataset). Dans Power BI Embedded, les utilisateurs sont identifiés par la propriété de nom d’utilisateur dans un jeton d’incorporation.In Power BI Embedded, users are identified by the username property in an embed token.

Rôles : les utilisateurs appartiennent à des rôles.Roles – Users belong to roles. Un rôle est un conteneur de règles et peut être nommé en Directeur des ventes ou Commercial. Vous créez des rôles dans 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. Pour plus d’informations, consultez Sécurité au niveau des lignes avec Power BI Desktop.For more information, see Row-level security (RLS) with Power BI Desktop.

Règles : les rôles ont des règles et ces dernières sont les filtres réels qui vont être appliqués aux données.Rules – Roles have rules, and those rules are the actual filters that are going to be applied to the data. Les règles peuvent être aussi simples que « Pays = États-Unis » ou quelque chose de beaucoup plus dynamique.The rules could be as simple as “Country = USA” or something much more dynamic. Dans le reste de cet article, vous verrez un exemple de création de sécurité au niveau des lignes et de consommation au sein d’une application incorporée.For the rest of this article, there's an example of authoring RLS, and then consuming that within an embedded application. Cet exemple utilise le fichier PBIX Exemple Analyse de la vente au détail.Our example uses the Retail Analysis Sample PBIX file.

Exemple de rapport

Ajout de rôles dans Power BI DesktopAdding roles with Power BI Desktop

Notre exemple Analyse de la vente au détail affiche les ventes pour tous les magasins d’une chaîne de distribution.Our Retail Analysis sample shows sales for all the stores in a retail chain. Sans la sécurité au niveau des lignes, tous les directeurs régionaux qui se connectent au rapport pour le consulter voient les mêmes données.Without RLS, no matter which district manager signs in and views the report, they all see the same data. La direction a déterminé que chaque directeur régional devait voir uniquement les ventes des magasins qu’il gère.Senior management has determined each district manager should only see the sales for the stores they manage. La sécurité au niveau des lignes permet à la direction de limiter les données en fonction d’un directeur régional.Using RLS allows Senior management to restrict data based on a district manager.

La sécurité au niveau des lignes est créée dans Power BI Desktop.RLS is authored in Power BI Desktop. Lorsque le jeu de données et les rapports sont ouverts, vous pouvez basculer vers la vue de diagramme pour voir le schéma :When the dataset and report are opened, we can switch to diagram view to see the schema:

Vue de diagramme dans Power BI Desktop

Il convient de noter quelques points avec ce schéma :Here are a few things to notice with this schema:

  • Toutes les mesures, telles que Total Sales (Total des ventes) , sont stockées dans la table de faits Sales (Ventes) .All measures, like Total Sales, are stored in the Sales fact table.

  • Il existe quatre tables de dimension connexes supplémentaires : Item (Article) , Time (Temps) , Store (Magasin) et District (Secteur) .There are four additional related dimension tables: Item, Time, Store, and District.

  • Les flèches sur les lignes de relation indiquent dans quel sens les filtres peuvent transiter d’une table à une autre.The arrows on the relationship lines indicate which way filters can flow from one table to another. Par exemple, si un filtre est placé sur Time[Date] , dans le schéma actuel, il permet uniquement de filtrer les valeurs de la table Sales (Ventes) .For example, if a filter is placed on Time[Date], in the current schema it would only filter down values in the Sales table. Aucune autre table n’est affectée par ce filtre, car toutes les flèches des lignes de relation pointent vers la table Sales et n’en partent pas.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 table District (Secteur) indique qui est le directeur de chaque région :The District table indicates who the manager is for each district:

    Lignes d’une table District (Secteur)

En fonction de ce schéma, si vous appliquez un filtre à la colonne District Manager (Directeur régional) dans la table District (Secteur), et si ce filtre correspond à l’utilisateur qui consulte le rapport, il filtre les tables Store (Magasin) et Sales (Ventes) pour afficher les données de ce directeur régional.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.

Voici comment procéder :Here's how:

  1. Sous l’onglet Modélisation, sélectionnez Gérer les rôles.On the Modeling tab, select Manage Roles.

    Onglet Modélisation dans Power BI Desktop

  2. Créez un rôle nommé Directeur.Create a new role called Manager.

    Créer un rôle

  3. Dans la table District (Secteur) , entrez cette expression DAX : [District Manager] = USERNAME() .In the District table, enter this DAX expression: [District Manager] = USERNAME().

    Instruction DAX pour la règle de sécurité au niveau des lignes

  4. Pour vérifier que les règles fonctionnent, sous l’onglet Modélisation, sélectionnez Afficher comme rôles, puis sélectionnez le rôle Manager (Directeur) que vous avez créé ainsi que Autres utilisateurs.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. Entrez AndrewMa pour l’utilisateur.Enter AndrewMa for the user.

    Boîte de dialogue Afficher comme rôles

    Les rapports affichent les données comme si vous étiez connecté sous le nom d’AndrewMa.The reports show data as if you're signed in as AndrewMa.

En appliquant le filtre comme vous l’avez fait ici, tous les enregistrements des tables District (Secteur), Store (Magasin) et Sales (Ventes) sont filtrés.Applying the filter, the way we did here, filters down all records in the District, Store, and Sales tables. Toutefois, en raison de la direction du filtrage sur les relations entre Sales et Time, Sales et Item, et Item et Time, les tables ne sont pas filtrées.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. Pour en savoir plus sur le filtrage croisé bidirectionnel, téléchargez le livre blanc Bidirectional cross-filtering in SQL Server Analysis Services 2016 and 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.

Application de l’utilisateur et du rôle à un jeton d’incorporationApplying user and role to an embed token

Maintenant que vous avez configuré vos rôles Power BI Desktop, vous devez effectuer certaines tâches dans votre application pour tirer parti des rôles.Now that you have your Power BI Desktop roles configured, some more work needs to be done in your application to take advantage of the roles.

Les utilisateurs sont authentifiés et autorisés par votre application et les jetons d’incorporation sont utilisés pour accorder l’accès utilisateur à un rapport Power BI Embedded spécifique.Users are authenticated and authorized by your application and embed tokens are used to grant a user access to a specific Power BI Embedded report. Power BI Embedded n’a pas d’informations spécifiques sur l’utilisateur.Power BI Embedded doesn’t have any specific information on who your user is. Pour que la sécurité au niveau des lignes fonctionne, vous devez transmettre un contexte supplémentaire dans le cadre de votre jeton d’incorporation sous la forme d’identités.For RLS to work, you need to pass some additional context as part of your embed token in the form of identities. Vous pouvez passer les identités à l’aide de l’API Jeton d’incorporation.You can pass the identities by using the Embed Token API.

L’API accepte une liste des identités avec l’indication des jeux de données pertinents.The API accepts a list of identities with indication of the relevant datasets. Pour que la sécurité au niveau des lignes fonctionne, vous devez transmettre les éléments suivants dans le cadre de l’identité.For RLS to work, you need to pass the below pieces as part of the identity.

  • Nom d’utilisateur (obligatoire)  : chaîne qui peut être utilisée pour identifier l’utilisateur lors de l’application des règles de sécurité au niveau des lignes.username (mandatory) – A string that can be used to help identify the user when applying RLS rules. Un seul utilisateur peut être répertorié.Only a single user can be listed. Votre nom d’utilisateur peut être créé avec des caractères ASCII.Your username can be created with ASCII characters.
  • Rôles (obligatoire) : chaîne contenant les rôles à sélectionner lors de l’application des règles de sécurité au niveau des lignes.roles (mandatory) – A string containing the roles to select when applying Row Level Security rules. Si vous transmettez plusieurs rôles, ceux-ci doivent l’être en tant que tableau de chaînes.If passing more than one role, they should be passed as a string array.
  • Jeu de données (obligatoire)  : jeu de données applicable à l’artefact que vous incorporez.dataset (mandatory) – The dataset that is applicable for the artifact you're embedding.

Vous pouvez créer le jeton d’incorporation à l’aide de la méthode GenerateTokenInGroup sur PowerBIClient.Reports.You can create the embed token by using the GenerateTokenInGroup method on PowerBIClient.Reports.

Par exemple, vous pouvez modifier l’exemple PowerBIEmbedded_AppOwnsData.For example, you could change the PowerBIEmbedded_AppOwnsData sample. Les lignes 76 et 77 de Services\EmbedService.cs peuvent être modifiées de :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);

versto

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

Si vous appelez l’API REST, l’API mise à jour accepte maintenant un tableau JSON supplémentaire, nommé Identités, qui contient un nom d’utilisateur, la liste des rôles de chaîne et la liste des jeux de données de chaîne.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.

Utilisez le code suivant en guise d’exemple :Use the following code below as an example:

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

Maintenant, quand une personne se connecte à votre application pour afficher cet artefact, elle voit les données qu’elle est autorisée à voir, en fonction de ce qui a été défini par la sécurité au niveau des lignes.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.

Utilisation des connexions actives d’Analysis ServicesWorking with Analysis Services live connections

Vous pouvez utiliser la sécurité au niveau des lignes avec les connexions actives Analysis Services pour les serveurs locaux.Row-level security can be used with Analysis Services live connections for on-premises servers. Lorsque vous utilisez ce type de connexion, vous devez comprendre quelques concepts spécifiques.There are a few specific concepts that you should understand when using this type of connection.

L’identité effective fournie pour la propriété de nom d’utilisateur doit être celle d’un utilisateur Windows disposant d’autorisations sur le serveur Analysis Services.The effective identity that is provided for the username property must be a Windows user with permissions on the Analysis Services server.

Configuration d’une passerelle de données localeOn-premises data gateway configuration

Une passerelle de données locale est utilisée lors de l’utilisation des connexions actives d’Analysis Services.An On-premises data gateway is used when working with Analysis Services live connections. Lorsque vous générez un jeton incorporé, avec une identité répertoriée, le compte principal doit être répertorié en tant qu’administrateur de la passerelle.When generating an embed token, with an identity listed, the master account needs to be listed as an admin of the gateway. Si le compte principal n’est pas listé, la sécurité au niveau des lignes n’est pas appliquée à la propriété des données.If the master account isn't listed, the row-level security isn't applied to the property of the data. Une personne qui n’est pas administrateur de la passerelle peut fournir des rôles, mais doit spécifier son propre nom d’utilisateur en tant qu’identité effective.A non-admin of the gateway can provide roles, but must specify its own username for the effective identity.

Utilisation des rôlesUse of roles

Des rôles peuvent être fournis avec l’identité dans un jeton d’incorporation.Roles can be provided with the identity in an embed token. Si aucun rôle n’est fourni, le nom d’utilisateur fourni peut être utilisé pour résoudre les rôles associés.If no role is provided, the username that was provided can be used to resolve the associated roles.

Utilisation de la fonctionnalité CustomDataUsing the CustomData feature

CustomData fonctionne uniquement pour les modèles qui résident dans Azure Analysis Services et uniquement en mode Connexion directe.The CustomData feature only works for models that lie in Azure Analysis Services, and it only works in Connect live mode. Contrairement aux utilisateurs et aux rôles, la fonctionnalité de données personnalisées ne peut pas être définie dans un fichier .pbix.Unlike users and roles, the Custom data feature can't be set inside a .pbix file. Lors de la génération d’un jeton avec la fonctionnalité Custom data, vous devez avoir un nom d’utilisateur.When generating a token with the Custom data feature, you need to have a username.

La fonctionnalité CustomData vous permet d’ajouter un filtre de lignes lors de l’affichage des données Power BI dans votre application quand vous utilisez Azure Analysis Services comme source de données (affichage de données Power BI connectées à Azure Analysis Services dans votre application).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 fonctionnalité CustomData permet de passer du texte libre (chaîne) à l’aide de la propriété de chaîne de connexion CustomData.The CustomData feature allows passing free text (string) using the CustomData connection string property. Analysis Services utilise cette valeur par le biais de la fonction CUSTOMDATA() .Analysis Services use this value via the CUSTOMDATA() function.

Le seul moyen de disposer d’une sécurité au niveau des lignes dynamique (qui utilise des valeurs dynamiques pour l’évaluation de filtre) dans Azure Analysis Services consiste à utiliser la fonction CUSTOMDATA() .The only way to have dynamic RLS (which uses dynamic values for filter evaluation) in Azure Analysis Services, is using the CUSTOMDATA() function.

Vous pouvez l’utiliser à l’intérieur de la requête DAX de rôle, de même que sans aucun rôle dans une requête DAX de mesure.You can use it inside the role DAX query, and you can use it without any role in a measure DAX query. La fonctionnalité CustomData fait partie de nos fonctionnalités de génération de jetons pour les artefacts suivants : tableau de bord, rapport et vignette.CustomData feature is part of our token generation functionality for the following artifacts: dashboard, report, and tile. Les tableaux de bord peuvent avoir plusieurs identités CustomData (une par vignette/modèle).Dashboards can have multiple CustomData identities (one per tile/model).

Ajouts du SDK CustomDataCustomData SDK Additions

La propriété de chaîne CustomData a été ajoutée à notre identité effective dans le scénario de génération de jetons.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é peut être créée avec des données personnalisées à l’aide de l’appel suivant :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);

Utilisation du SDK CustomDataCustomData SDK Usage

Si vous appelez l’API REST, vous pouvez ajouter des données personnalisées dans chaque identité, par exemple :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" ]
        }
    ]
}

Voici les étapes pour commencer à configurer la fonctionnalité CustomData() avec votre application Power BI Embedded.Here are the steps to begin setting up the CustomData() feature with your Power BI Embedded application.

  1. Créez votre base de données Azure Analysis Services.Create your Azure Analysis Services database. Ensuite, connectez-vous à votre serveur Azure Analysis Services par le biais de SQL Server Management Studio.Then sign in to your Azure Analysis Services server via SQL Server Management Studio.

    Créer une base de données Azure Analysis Services

    Base de données Analysis Services

  2. Créez un rôle dans le serveur Analysis Services.Create a Role in the Analysis Services server.

    Créer un rôle

  3. Définissez vos paramètres Généraux.Set your General settings. Ici, vous attribuez le Nom du rôle et définissez les autorisations de base de données sur Lecture uniquement.Here you give the Role Name and set the database permissions to Read only.

    Créer un rôle - Définir les paramètres généraux

  4. Définissez les paramètres d’Appartenance.Set the Membership settings. Ici, vous ajoutez les utilisateurs qui sont concernés par ce rôle.Here you add te users that are affected by this role.

    Créer un rôle - Définir les paramètres d’appartenance

  5. Définissez votre requête DAX Filtres de lignes à l’aide de la fonction CUSTOMDATA() .Set your Row filters DAX query using the CUSTOMDATA() function.

    Créer un rôle - Définir des filtres de lignes

  6. Générez un rapport PBI et publiez-le sur un espace de travail avec une capacité dédiée.Build a PBI report and publish it to a workspace with dedicated capacity.

    Exemple de rapport PBI

  7. Utilisez les API Power BI pour utiliser la fonctionnalité CustomData dans votre application.Use the Power BI APIs to use the CustomData feature in your application. Lors de la génération d’un jeton avec la fonctionnalité Custom data, vous devez avoir un nom d’utilisateur.When generating a token with the Custom data feature, you need to have a username. Le nom d’utilisateur doit être identique à l’UPN de l’utilisateur principal.The username must be equal to the UPN of the master user. L’utilisateur principal doit être un membre du ou des rôles que vous avez créés.The master user must be a member of the role(s) you created. Si aucun rôle n’est spécifié, tous les rôles dont l’utilisateur principal est membre sont utilisés pour l’évaluation de la fonction de sécurité au niveau des lignes.If no role(s) are specified, then all the roles the master user is a member of are used for RLS evaluation.

    Lorsque vous utilisez un principal de service, vous devez également effectuer les étapes ci-dessus au lieu d’utiliser un compte principal.When working with a service principal, you also need to do the above steps in place of using a master account. Lorsque vous générez un jeton incorporé, utilisez l’ID d’objet du principal de service comme nom d’utilisateur.When generating embed token, use the service principal object ID as the username.

    Notes

    Quand vous êtes prêt à déployer votre application en production, l’option ou le champ de compte d’utilisateur principal ne doit pas être visible par l’utilisateur final.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.

    Affichez le code pour ajouter la fonctionnalité CustomData.View the code to add the CustomData feature.

  8. Vous pouvez maintenant afficher le rapport dans votre application avant d’appliquer les valeurs Custom data pour voir toutes les données contenues dans votre rapport.Now you can view the report in your application before applying the Custom data value(s) to see all the data your report holds.

    Avant l’application des données personnalisées

    Appliquez ensuite les valeurs Custom data pour vérifier que le rapport affiche un ensemble de données différent.Then apply the Custom data value(s) to see how the report displays a different set of data. Après l’application des données personnaliséesAfter CustomData is applied

Utilisation de la sécurité au niveau des lignes ou de filtres JavaScriptUsing RLS vs. JavaScript filters

Quand vous décidez de filtrer vos données dans un rapport, vous pouvez utiliser la sécurité au niveau des lignes ou des filtres JavaScript.When deciding on filtering your data in a report, you can use row-level security (RLS) or JavaScript filters.

La sécurité au niveau des lignes est une fonctionnalité qui filtre les données au niveau du modèle de données.Row-level security is a feature that filters data at the data model level. Votre source de données back-end contrôle vos paramètres de sécurité au niveau des lignes.Your backend data source controls your RLS settings. En fonction de votre modèle de données, la génération de jeton d’incorporation définit le nom d’utilisateur et les rôles pour la session.Based on your data model, the embed token generation sets the username and the roles for the session. Ces informations ne peuvent pas être substituées, supprimées ou contrôlées par le code côté client, c’est pourquoi elles sont considérées comme sécurisées.It cannot be overridden, removed, or controlled by the client-side code and that’s why it’s considered secure. Nous vous recommandons d’utiliser la sécurité au niveau des lignes pour filtrer les données en toute sécurité.We recommend using RLS for filtering data securely. Vous pouvez filtrer les données avec la sécurité au niveau des lignes en utilisant l’une des options ci-dessous.You can filter data with RLS by using one of the options below.

  • Configuration des rôles dans un rapport Power BI.Configuring roles in a Power BI report.
  • Configuration des rôles au niveau de la source de données (connexion active Analysis Services uniquement).Configuring roles at the data source level (Analysis Services live connection only).
  • Par programmation avec un jeton d’incorporation à l’aide de EffectiveIdentity.Programmatically with an Embed Token using EffectiveIdentity. Quand vous utilisez un jeton d’incorporation, le filtre réel traverse le jeton d’incorporation pour une session spécifique.When using an embed token, the actual filter passes through the embed token for a specific session.

Les filtres de JavaScript servent à autoriser l’utilisateur à consommer une vue des données filtrée, réduite ou à portée spécifique.JavaScript filters are used to allow the user to consume reduced, scoped, or a filtered view of the data. Toutefois, l’utilisateur a quand même accès aux tables, colonnes et mesures du schéma de modèle, et il peut potentiellement accéder à toutes les données qui s’y trouvent.However, the user still has access to the model schema tables, columns, and measures and potentially can access any data there. L’accès restreint aux données peut uniquement être appliqué avec la sécurité au niveau des lignes, et non par le biais des API de filtrage côté client.Restricted access to the data can only be applied with RLS and not through client-side filtering APIs.

Identité basée sur les jetons avec Azure SQL DatabaseToken-based Identity with Azure SQL Database

L’identité basée sur les jetons vous permet de spécifier l’identité effective pour un jeton incorporé à l’aide d’un jeton d’accès Azure Active Directory (AAD) pour une base de données Azure SQL Database.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.

Les clients qui conservent leurs données dans Azure SQL Database bénéficient désormais d’une nouvelle fonctionnalité permettant de gérer les utilisateurs et leur accès aux données dans Azure SQL lors de l’intégration avec 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.

Lorsque vous générez le jeton d’incorporation, vous pouvez spécifier l’identité effective d’un utilisateur dans Azure SQL.When you're generating the embed token, you can specify the effective identity of a user in Azure SQL. Vous pouvez spécifier l’identité effective d’un utilisateur en passant le jeton d’accès AAD au serveur.You can specify the effective identity of a user by passing the AAD access token to the server. Le jeton d’accès est utilisé pour extraire uniquement les données pertinentes pour cet utilisateur à partir d’Azure SQL pour cette session spécifique.The access token is used to pull only the relevant data for that user from Azure SQL, for that specific session.

Il peut être utilisé pour gérer l’affichage de chaque utilisateur dans Azure SQL ou se connecter à Azure SQL en tant que client spécifique dans une base de données multi-locataire.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. Il peut également appliquer la sécurité au niveau des lignes sur cette session dans Azure SQL et récupérer uniquement les données pertinentes pour cette session, ce qui évite d’avoir à gérer la SNL dans 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.

Ces problèmes d’identité effective s’appliquent à des règles SNL directement sur le serveur Azure SQL.Such effective identity issues apply to RLS rules directly on the Azure SQL Server. Power BI Embedded utilise le jeton d’accès fourni lors de l’interrogation des données à partir du serveur Azure SQL.Power BI Embedded uses the provided access token when querying data from the Azure SQL Server. L’UPN de l’utilisateur (pour lequel le jeton d’accès a été fourni) est accessible suite à la fonction 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é basée sur les jetons fonctionne uniquement pour les modèles DirectQuery sur une capacité dédiée, connectée à Azure SQL Database, qui est configuré pour autoriser l’authentification AAD (en savoir plus sur l’authentification AAD pour Azure SQL Database).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). La source de données du jeu de données doit être configurée pour utiliser les informations d’identification OAuth2 des utilisateurs finaux, en vue d’utiliser l’identité basée sur les jetons.The dataset’s data source must be configured to use end users’ OAuth2 credentials, to use a token-based identity.

Configurer le serveur Azure SQL Server

Ajouts au SDK de l’identité basée sur les jetonsToken-based Identity SDK additions

La propriété de blob d’identité a été ajoutée à notre identité effective dans le scénario de génération de jetons.The identity blob property was added to our effective identity in the token generation scenario.

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

Le type IdentityBlob est une structure JSON simple contenant une propriété de chaîne de valeurThe IdentityBlob type is a simple JSON structure holding a value string property

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

EffectiveIdentity peut être créé avec le blob d’identité à l’aide de l’appel suivant :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);

Le blob d’identité peut être créé à l’aide de l’appel suivant.Identity blob can be created using the following call.

public IdentityBlob(string value);

Utilisation de l’API REST de l’identité basée sur les jetonsToken-based Identity REST API Usage

Si vous appelez l’API REST, vous pouvez ajouter le blob d’identité dans chaque 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….”
         }
        }
    ]
}

La valeur fournie dans le blob d’identité doit être un jeton d’accès valide à Azure SQL Server (avec une URL de ressource de (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/).

Notes

Pour pouvoir créer un jeton d’accès pour Azure SQL, l’application doit avoir l’autorisation déléguée Accéder à Azure SQL Database et Data Warehouse à l’API Azure SQL Database sur la configuration de l’inscription d’application AAD dans le portail 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.

Inscriptions des applications

Passerelle de données locale avec principal de serviceOn-premises data gateway with service principal

Les clients qui configurent la sécurité au niveau des lignes (SNL) à l’aide d’une source de données à connexion active locale SSAS (SQL Server Analysis Services) peuvent bénéficier de la nouvelle fonctionnalité du principal de service pour gérer les utilisateurs et leur accès aux données dans SSAS lors de l’intégration à 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.

L’utilisation des API REST Power BI vous permet de spécifier l’identité effective des connexions actives locales SSAS pour un jeton d’incorporation à l’aide d’un objet de principal de service.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.

Jusqu’à présent, pour pouvoir spécifier l’identité effective d’une connexion active locale SSAS, l’utilisateur principal générant le jeton d’incorporation devait être administrateur de passerelle. Désormais, au lieu d’exiger que l’utilisateur soit administrateur de passerelle, ce dernier peut accorder à l’utilisateur une autorisation dédiée à cette source de données. L’utilisateur peut ainsi remplacer l’identité effective au moment de la génération du jeton d’incorporation.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. Cette nouvelle fonctionnalité permet l’incorporation de contenu avec un principal de service pour une connexion SSAS active.This new ability enables embedding with service principal for a live SSAS connection.

Pour activer ce scénario, l’administrateur de passerelle utilise l’API REST d’ajout d’utilisateur à la source de données afin de donner au principal de service l’autorisation ReadOverrideEffectiveIdentity pour 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.

Vous ne pouvez pas définir cette autorisation à l’aide du portail d’administration.You can't set this permission using the admin portal. Cette autorisation est définie uniquement avec l’API.This permission is only set with the API. Dans le portail d’administration, vous voyez une indication pour les utilisateurs et les SPN disposant de telles autorisations.In the admin portal, you see an indication for users and SPNs with such permissions.

Considérations et limitationsConsiderations and limitations

  • L’attribution d’utilisateurs aux rôles, dans le service Power BI, n’affecte pas la sécurité au niveau des lignes lors de l’utilisation d’un jeton d’incorporation.Assignment of users to roles within the Power BI service doesn't affect RLS when using an embed token.
  • Bien que le service Power BI n’applique pas le paramètre de sécurité au niveau des lignes aux administrateurs ni aux membres dotés d’autorisations de modification, quand vous fournissez une identité avec un jeton d’incorporation, celle-ci est appliquée aux données.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.
  • Les connexions actives Analysis Services sont prises en charge pour les serveurs locaux.Analysis Services live connections are supported for on-premises servers.
  • Les connexions actives Azure Analysis Services prennent en charge le filtrage par rôles.Azure Analysis Services live connections support filtering by roles. Le filtrage dynamique peut être effectué à l’aide de CustomData.Dynamic filtering can be done using CustomData.
  • Si le jeu de données sous-jacent ne nécessite pas la sécurité au niveau des lignes, la demande GenerateToken ne doit pas contenir d’identité effective.If the underlying dataset doesn’t require RLS, the GenerateToken request must not contain an effective identity.
  • Si le jeu de données sous-jacent est un modèle cloud (modèle mis en cache ou DirectQuery), l’identité effective doit inclure au moins un rôle. Sinon, l’attribution de rôle n’a pas lieu.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.
  • Une liste d’identités active plusieurs jetons d’identité pour l’incorporation de tableau de bord.A list of identities enables multiple identity tokens for dashboard embedding. Pour tous les autres artefacts, la liste contient une identité unique.For all others artifacts, the list contains a single identity.

Limitations de l’identité basée sur les jetonsToken-based Identity limitations

  • Vous ne pouvez utiliser la sécurité au niveau des lignes que si vous disposez d’une capacité dédiée.You can use RLS only if you have a dedicated capacity.
  • La fonctionnalité SNL ne fonctionne pas avec SQL Server en local.RLS doesn’t work with SQL Server on-premises.

D’autres questions ?More questions? Essayez d’interroger la communauté Power BITry asking the Power BI Community