Utiliser la sécurité au niveau des lignes avec le contenu incorporé Power BIUse row-level security with Power BI embedded content

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. Plusieurs utilisateurs différents peuvent utiliser ces mêmes artefacts tout en voyant différentes données.Multiple, 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! Vous devez configurer le jeton d’incorporation pour qu’il prenne en compte l’utilisateur et le rôle.You will need to configure the embed token to account for the user and role. Poursuivez votre lecture pour savoir comment procéder.Read on to learn how to do this.

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 are 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 is 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 chacun d’entre eux :Let’s take a closer look at each:

Utilisateurs : utilisateurs finaux affichant 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. Cela peut être aussi simple que « Pays = États-Unis » ou quelque chose de beaucoup plus dynamique.This could be as simple as “Country = USA” or something much more dynamic. Dans le reste de cet article, nous fournissons un exemple de création d’une sécurité au niveau des lignes et de consommation au sein d’une application incorporée.For the rest of this article, we’ll provide 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’ll see the same data. La direction a déterminé que chaque directeur régional doit voir uniquement les ventes des magasins qu’il gère, et pour ce faire, vous pouvez utiliser la sécurité au niveau des lignes.Senior management has determined each district manager should only see the sales for the stores they manage, and to do this, we can use RLS.

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 would be 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 également les tables Store (Magasin) et Sales (Ventes) pour qu’elles affichent uniquement les données pour 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 will also filter down the Store and Sales tables to only 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 l’expression DAX suivante : [Directeur régional] = USERNAME().In the District table, enter the following DAX expression: [District Manager] = USERNAME().

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

  4. Pour vous assurer 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 venez de créer, ainsi que Autre utilisateur.To make sure the rules are working, on the Modeling tab, select View as Roles, and then select both the Manager role you just created, along with Other user. Entrez Andrew Ma pour l’utilisateur.Enter Andrew Ma for the user.

    Boîte de dialogue Afficher comme rôles

    Les rapports affichent maintenant les données comme si vous étiez connecté en tant que Andrew Ma.The reports will now show data as if you were signed in as Andrew Ma.

Appliquer le filtre comme vous l’avez fait ici a pour effet de filtrer tous les enregistrements des tables District (Secteur), Store (Magasin) et Sales (Ventes).Applying the filter, the way we did here, will filter 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 will not be 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, there is some work needed 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 that 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’ll need to pass some additional context as part of your embed token in the form of identities. Pour cela, utilisez l’API GenerateToken.This is done by way GenerateToken API.

L’API GenerateToken accepte une liste des identités avec l’indication des jeux de données pertinents.The GenerateToken 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 au sein de l’identité.For RLS to work, you will need to pass the following as part of the identity.

  • Nom d’utilisateur (obligatoire) : il s’agit d’une 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) – This is 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.
  • 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 are 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. Home\HomeController.cs line 76 and 77 peut être mis à jour de :Home\HomeController.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, par exemple :If you are calling the REST API, the updated API now accepts an additional JSON array, named identities, containing a user name, list of string roles and list of string datasets, e.g.:

{
    "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 peut uniquement voir 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 be able to see the data that they are 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 répertorié, la sécurité au niveau des lignes n’est pas correctement appliquée aux données.If the master account is not listed, the row-level security will not be applied property to 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 incorporé.Roles can be provded with the identity in an embed token. Si aucun rôle n’est fourni, le nom d’utilisateur fourni est utilisé pour résoudre les rôles associés.If no role is provided, the username that was provided will be used to resolve the associated roles.

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 does not affect RLS when using an embed token.
  • Alors 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, lorsque vous fournissez une identité avec un jeton d’incorporation, celle-ci est appliquée aux données.While the Power BI service will not apply RLS setting to admins or members with edit permissions, when you supply an identity with an embed token, it will be applied 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, mais pas le filtrage dynamique par nom d’utilisateur.Azure Analysis Services live connections support filtering by roles, but not dynamic by username.
  • 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’est pas effectuée.If the underlying dataset is a cloud model (cached model or DirectQuery), the effective identity must include at least one role, otherwise role assignment will not 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.

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