Implementieren der Sicherheit auf Zeilenebene in einem lokalen tabellarischen Analysis Services-ModellImplement row-level security in an on-premises Analysis Services tabular model

In diesem Tutorial arbeiten Sie die unten aufgeführten Schritte anhand eines Beispieldatasets durch. Dabei lernen Sie, wie Sie die Sicherheit auf Zeilenebene in einem lokalen tabellarischen Analysis Services-Modell implementieren und dieses in einem Power BI-Bericht verwenden.Using a sample dataset to work through the steps below, this tutorial shows you how to implement row-level security in an on-premises Analysis Services Tabular Model and use it in a Power BI report.

  • Erstellen einer neuen Sicherheitstabelle in der AdventureworksDW2012-DatenbankCreate a new security table in the AdventureworksDW2012 database
  • Erstellen des tabellarischen Modells mit erforderlichen Fakten- und DimensionstabellenBuild the tabular model with necessary fact and dimension tables
  • Definieren von Benutzerrollen und -berechtigungenDefine user roles and permissions
  • Bereitstellen des Modells auf einer Analysis Services-TabelleninstanzDeploy the model to an Analysis Services tabular instance
  • Erstellen eines Power BI Desktop-Berichts, der Daten anzeigt, die genau auf den Benutzer zugeschnitten sind, der auf den Bericht zugreiftBuild a Power BI Desktop report that displays data tailored to the user accessing the report
  • Bereitstellen des Berichts im Power BI-DienstDeploy the report to Power BI service
  • Erstellen eines neuen Dashboards basierend auf dem BerichtCreate a new dashboard based on the report
  • Freigeben des Dashboards an Ihre KollegenShare the dashboard with your coworkers

Für dieses Tutorial ist die AdventureworksDW2012-Datenbank erforderlich.This tutorial requires the AdventureworksDW2012 database.

Aufgabe 1: Erstellen einer Benutzersicherheitstabelle und Definieren der DatenbeziehungTask 1: Create the user security table and define data relationship

Es gibt viele Artikel darüber, wie die dynamische Sicherheit auf Zeilenebene mit dem SQL Server Analysis Services-Tabellenmodell definiert wird.You can find many articles describing how to define row-level dynamic security with the SQL Server Analysis Services (SSAS) tabular model. In unserem Beispiel folgen wir dem Artikel Implement Dynamic Security by Using Row Filters (Implementieren dynamischer Sicherheit mithilfe von Zeilenfiltern).For our sample, we use Implement Dynamic Security by Using Row Filters.

Für die hier aufgeführten Schritte ist die relationale Datenbank AdventureworksDW2012 erforderlich.The steps here require using the AdventureworksDW2012 relational database.

  1. Erstellen Sie in AdventureworksDW2012 wie unten gezeigt die Tabelle DimUserSecurity.In AdventureworksDW2012, create the DimUserSecurity table as shown below. Sie können SQL Server Management Studio (SSMS) zum Erstellen der Tabelle verwenden.You can use SQL Server Management Studio (SSMS) to create the table.

    Erstellen der Tabelle „DimUserSecurity“

  2. Nachdem Sie die Tabelle erstellt und gespeichert haben, müssen Sie die Beziehung zwischen der Spalte SalesTerritoryID der Tabelle DimUserSecurity und der Spalte SalesTerritoryKey der Tabelle DimSalesTerritory wie unten gezeigt erstellen.Once you create and save the table, you need to establish the relationship between the DimUserSecurity table's SalesTerritoryID column and the DimSalesTerritory table's SalesTerritoryKey column, as shown below.

    Klicken Sie in SSMS mit der rechten Maustaste auf die Tabelle DimUserSecurity und dann auf Entwurf.In SSMS, right-click DimUserSecurity, and select Design. Klicken Sie dann auf Tabellen-Designer > Beziehungen... . Speichern Sie anschließend die Tabelle.Then select Table Designer > Relationships.... When done, save the table.

    Fremdschlüsselbeziehungen

  3. Fügen Sie Benutzer zur Tabelle hinzu.Add users to the table. Klicken Sie mit der rechten Maustaste auf die Tabelle DimUserSecurity und dann auf Edit Top 200 Rows (Obere 200 Zeilen bearbeiten).Right-click DimUserSecurity and select Edit Top 200 Rows. Wenn Sie Benutzer hinzugefügt haben, sollte die Tabelle DimUserSecurity ähnlich wie im folgenden Beispiel aussehen:Once you've added users, the DimUserSecurity table should appear similar to the following example:

    Tabelle „DimUserSecurity“ mit Beispielbenutzern

    Sie werden in den nächsten Aufgaben zu diesen Benutzern zurückkehren.You'll see these users in upcoming tasks.

  4. Als Nächstes führen Sie einen inneren Join mit der Tabelle DimSalesTerritory durch, die Details zur Region anzeigt, die dem Benutzer zugeordnet ist.Next, do an inner join with the DimSalesTerritory table, which shows the user associated region details. Der folgende SQL-Code führt den inneren Join durch, und die folgende Abbildung zeigt, wie die Tabelle danach aussieht.The SQL code here does the inner join, and the image shows how the table then appears.

    select b.SalesTerritoryCountry, b.SalesTerritoryRegion, a.EmployeeID, a.FirstName, a.LastName, a.UserName from [dbo].[DimUserSecurity] as a join [dbo].[DimSalesTerritory] as b on a.[SalesTerritoryID] = b.[SalesTerritoryKey]
    

    Die verknüpfte Tabelle zeigt, wer für welche Vertriebsregion zuständig ist. Dies ist aufgrund der in Schritt 2 erstellten Beziehung möglich.The joined table shows who is responsible for each sales region, thanks to the relationship created in Step 2. Sie sehen z. B., dass Rita Santos für Australien zuständig ist.For example, you can see that Rita Santos is responsible for Australia.

Aufgabe 2: Erstellen des tabellarischen Modells mit Fakten- und DimensionstabellenTask 2: Create the tabular model with facts and dimension tables

Sobald Ihr relationales Data Warehouse vorhanden ist, müssen Sie das Tabellenmodell definieren.Once your relational data warehouse is in place, you need to define the tabular model. Das Modell kann mit SQL Server Data Tools (SSDT) erstellt werden.You can create the model using SQL Server Data Tools (SSDT). Weitere Informationen finden Sie unter Create a New Tabular Model Project (Erstellen eines neuen Tabellenmodells).For more information, see Create a New Tabular Model Project.

  1. Importieren Sie alle erforderlichen Tabellen so wie unten dargestellt in das Modell.Import all the necessary tables into the model as shown below.

    Importierte SQL Server für die Verwendung mit Data Tools

  2. Nachdem Sie die erforderlichen Tabellen importiert haben, müssen Sie eine Rolle namens SalesTerritoryUsers definieren und ihr die Leseberechtigung erteilen.Once you've imported the necessary tables, you need to define a role called SalesTerritoryUsers with Read permission. Klicken Sie in SSDT auf das Menü Model (Modell) und anschließend auf Roles (Rollen).Select the Model menu in SQL Server Data Tools, and then select Roles. Klicken Sie im Rollen-Manager auf Neu.In Role Manager, select New.

  3. Fügen Sie im Rollen-Manager unter Mitglieder die Benutzer hinzu, die Sie in der Tabelle DimUserSecurity in Aufgabe 1 definiert haben.Under Members in the Role Manager, add the users that you defined in the DimUserSecurity table in Task 1.

    Hinzufügen von Benutzern im Rollen-Manager

  4. Fügen Sie anschließend die korrekten Funktionen für die Tabellen DimSalesTerritory und DimUserSecurity so wie unten in der Registerkarte Zeilenfilter gezeigt hinzu.Next, add the proper functions for both DimSalesTerritory and DimUserSecurity tables, as shown below under Row Filters tab.

    Hinzufügen von Funktionen zu „Zeilenfilter“

  5. Die Funktion LOOKUPVALUE gibt Werte für eine Spalte zurück, bei denen der Windows-Benutzername dem von der Funktion USERNAME zurückgegebenen Benutzernamen entspricht.The LOOKUPVALUE function returns values for a column in which the Windows user name matches the one the USERNAME function returns. Dann können Sie die Abfragen einschränken, sodass die von LOOKUPVALUE zurückgegebenen Werte den Werten in derselben oder einer ähnlichen Tabelle entsprechen.You can then restrict queries to where the LOOKUPVALUE returned values match ones in the same or related table. Geben Sie in der Spalte DAX Filter die folgende Formel ein:In the DAX Filter column, type the following formula:

        =DimSalesTerritory[SalesTerritoryKey]=LOOKUPVALUE(DimUserSecurity[SalesTerritoryID], DimUserSecurity[UserName], USERNAME(), DimUserSecurity[SalesTerritoryID], DimSalesTerritory[SalesTerritoryKey])
    

    In dieser Formel gibt die Funktion LOOKUPVALUE alle Werte für die Spalte DimUserSecurity[SalesTerritoryID] zurück, in der DimUserSecurity[UserName] dem aktuell angemeldeten Windows-Benutzernamen entspricht und DimUserSecurity[SalesTerritoryID] gleich DimSalesTerritory[SalesTerritoryKey] ist.In this formula, the LOOKUPVALUE function returns all values for the DimUserSecurity[SalesTerritoryID] column, where the DimUserSecurity[UserName] is the same as the current logged on Windows user name, and DimUserSecurity[SalesTerritoryID] is the same as the DimSalesTerritory[SalesTerritoryKey].

    Wichtig

    Beachten Sie, dass die DAX-Funktion USERELATIONSHIP nicht unterstützt wird, wenn Sie Sicherheit auf Zeilenebene verwenden.When using row-level security, the DAX function USERELATIONSHIP is not supported.

    Mithilfe der SalesTerritoryKey-Werte, die LOOKUPVALUE zurückgibt, werden dann die in DimSalesTerritory angezeigten Zeilen eingeschränkt.The set of Sales SalesTerritoryKey's LOOKUPVALUE returns is then used to restrict the rows shown in the DimSalesTerritory. Es werden nur Zeilen angezeigt, in denen sich der SalesTerritoryKey-Wert in den IDs befindet, die von der Funktion LOOKUPVALUE zurückgegeben werden.Only rows where the SalesTerritoryKey value is in the IDs that the LOOKUPVALUE function returns are displayed.

  6. Fügen Sie für die Tabelle DimUserSecurity in der Spalte DAX-Filter die folgende Formel ein:For the DimUserSecurity table, in the DAX Filter column, add the following formula:

        =FALSE()
    

    Diese Formel gibt an, dass alle Spalten nach false aufgelöst werden sollen. Das bedeutet, dass Spalten in der Tabelle DimUserSecurity nicht abgefragt werden können.This formula specifies that all columns resolve to false; meaning DimUserSecurity table columns can't be queried.

Nun müssen Sie das Modell verarbeiten und bereitstellen.Now you need to process and deploy the model. Weitere Informationen finden Sie unter Lektion 14: Bereitstellen.For more information, see Deploy.

Aufgabe 3: Hinzufügen von Datenquellen im lokalen DatengatewayTask 3: Add Data Sources within your On-premises data gateway

Sobald das tabellarische Modell bereitgestellt und für die Verwendung bereit ist, müssen Sie eine Datenquellenverbindung mit Ihrem lokalen tabellarischen Analysis Services-Server hinzufügen.Once your tabular model is deployed and ready for consumption, you need to add a data source connection to your on-premises Analysis Services tabular server.

  1. Sie müssen ein lokales Datengateway in Ihrer Umgebung installiert und konfiguriert haben, damit der Power BI-Dienst auf Ihren lokalen Analysedienst zugreifen kann.To allow the Power BI service access to your on-premises analysis service, you need an on-premises data gateway installed and configured in your environment.

  2. Wenn das Gateway ordnungsgemäß konfiguriert wurde, müssen Sie eine Datenquellenverbindung für die Analysis Services-Tabelleninstanz erstellen.Once the gateway is correctly configured, you need to create a data source connection for your Analysis Services tabular instance. Weitere Informationen finden Sie unter Verwalten Ihrer Datenquelle – Analysis Services.For more information, see Manage your data source - Analysis Services.

    Erstellen einer Datenquellenverbindung

Wenn dieser Vorgang abgeschlossen ist, ist das Gateway konfiguriert und kann mit der lokalen Analysis Services-Datenquelle interagieren.With this procedure complete, the gateway is configured and ready to interact with your on-premises Analysis Services data source.

Aufgabe 4: Erstellen eines Berichts basierend auf einem Analysis Services-Tabellenmodell mit Power BI DesktopTask 4: Create report based on analysis services tabular model using Power BI desktop

  1. Starten Sie Power BI Desktop, und wählen Sie Daten abrufen > Datenbank aus.Start Power BI Desktop and select Get Data > Database.

  2. Wählen Sie aus der Liste der Datenquellen die SQL Server Analysis Services-Datenbank, und klicken Sie auf Verbinden.From the data sources list, select the SQL Server Analysis Services Database and select Connect.

    Verbinden mit der SQL Server Analysis Services-Datenbank

  3. Geben Sie die Details zu Ihrer Analysis Services-Tabelleninstanz ein, und wählen Sie Live verbinden aus.Fill in your Analysis Services tabular instance details and select Connect live. Wählen Sie dann OK aus.Then select OK.

    Analysis Services-Details

    Mit Power BI funktioniert die dynamische Sicherheit nur mit einer Liveverbindung.With Power BI, dynamic security works only with a live connection.

  4. Sie sehen, dass sich das bereitgestellte Modell in der Analysis Services-Instanz befindet.You can see that the deployed model is in the Analysis Services instance. Wählen Sie das jeweilige Modell, und klicken Sie auf OK.Select the respective model and then select OK.

    Power BI Desktop zeigt nun alle verfügbaren Felder rechts neben dem Canvas im Bereich Felder an.Power BI Desktop now displays all the available fields, to the right of the canvas in the Fields pane.

  5. Wählen Sie rechts im Bereich Felder das Measure SalesAmount aus der Tabelle FactInternetSales sowie die Dimension SalesTerritoryRegion aus der Tabelle SalesTerritory aus.In the Fields pane, select the SalesAmount measure from the FactInternetSales table and the SalesTerritoryRegion dimension from the SalesTerritory table.

  6. Fügen Sie zunächst keine weiteren Spalten hinzu, um diesen Bericht einfach zu halten.To keep this report simple, we won't add any more columns right now. Ändern Sie die Visualisierung in ein Ringdiagramm, um die Datendarstellung aussagekräftiger zu gestalten.To have a more meaningful data representation, change the visualization to Donut chart.

    Visualisierung eines Ringdiagramms

  7. Wenn Ihr Bericht fertig ist, können Sie ihn direkt im Power BI-Portal veröffentlichen.Once your report is ready, you can directly publish it to the Power BI portal. Wählen Sie im Menüband Start in Power BI Desktop Veröffentlichen aus.From the Home ribbon in Power BI Desktop, select Publish.

Aufgabe 5: Erstellen und Freigeben eines DashboardsTask 5: Create and share a dashboard

Sie haben bis jetzt einen Bericht erstellt und ihn im Power BI-Dienst veröffentlicht.You've created the report and published it to the Power BI service. Jetzt können Sie das vorherig erstellte Beispiel verwenden, um ein Szenario zum Sichern von Modellen zu veranschaulichen.Now you can use the example created in previous steps to demonstrate the model security scenario.

In Ihrer Rolle als Vertriebsleiterin (Sales Manager) kann sich die Benutzerin Grace die Daten von allen verschiedenen Vertriebsregionen anzeigen lassen.In the role as Sales Manager, the user Grace can see data from all the different sales regions. Grace erstellt den Bericht und veröffentlicht ihn im Power BI-Dienst.Grace creates this report and publishes it to the Power BI service. Dieser Bericht wurde in den vorherigen Aufgaben erstellt.This report was created in the previous tasks.

Nachdem Grace den Bericht veröffentlicht hat, erstellt sie nun anhand dieses Berichts im Power BI-Dienst ein Dashboard namens TabularDynamicSec.Once Grace publishes the report, the next step is to create a dashboard in the Power BI service called TabularDynamicSec based on that report. Beachten Sie in der folgenden Abbildung, dass Grace sich die Daten aus allen Vertriebsregionen anzeigen lassen kann.In the following image, notice that Grace can see the data corresponding to all the sales region.

Dashboard des Power BI-Diensts

Grace gibt das Dashboard jetzt für ihre Kollegin Rita frei, die für den Vertrieb in der Region Australien zuständig ist.Now Grace shares the dashboard with a colleague, Rita, who is responsible for the Australia region sales.

Freigeben eines Power BI-Dashboards

Wenn Rita sich im Power BI-Dienst anmeldet und das freigegebene Dashboard aufruft, das Grace erstellt hat, sollten nur Umsätze aus der Region Australien zu sehen sein.When Rita logs in to the Power BI service and views the shared dashboard that Grace created, only sales from the Australia region are visible.

Herzlichen Glückwunsch!Congratulations! Der Power BI-Dienst zeigt die dynamische Sicherheit auf Zeilenebene an, die im lokalen Analysis Services-Tabellenmodell definiert wurde.The Power BI service shows the dynamic row-level security defined in the on-premises Analysis Services tabular model. Power BI verwendet die Eigenschaft EffectiveUserName, um die aktuellen Power BI-Benutzeranmeldeinformationen zum Ausführen der Abfragen an die lokale Datenquelle zu senden.Power BI uses the EffectiveUserName property to send the current Power BI user credential to the on-premises data source to run the queries.

Aufgabe 6: Verstehen der HintergrundvorgängeTask 6: Understand what happens behind the scenes

Bei dieser Aufgabe wird vorausgesetzt, dass Sie sich mit dem SQL Server Profiler auskennen, denn Sie müssen eine SQL Server Profiler-Ablaufverfolgung auf Ihrer lokalen SSAS-Tabelleninstanz erfassen.This task assumes you're familiar with SQL Server Profiler, since you need to capture a SQL Server profiler trace on your on-premises SSAS tabular instance.

Sobald der Benutzer (Rita) auf das Dashboard im Power BI-Dienst zugreift, wird die Sitzung initialisiert.The session gets initialized as soon as the user, Rita, accesses the dashboard in the Power BI service. Wie Sie sehen, nimmt die SalesTerritoryUsers-Rolle unmittelbar den effektiven Benutzernamen rita@contoso.com an.You can see that the salesterritoryusers role takes an immediate effect with the effective user name as rita@contoso.com

       <PropertyList><Catalog>DefinedSalesTabular</Catalog><Timeout>600</Timeout><Content>SchemaData</Content><Format>Tabular</Format><AxisFormat>TupleFormat</AxisFormat><BeginRange>-1</BeginRange><EndRange>-1</EndRange><ShowHiddenCubes>false</ShowHiddenCubes><VisualMode>0</VisualMode><DbpropMsmdFlattened2>true</DbpropMsmdFlattened2><SspropInitAppName>PowerBI</SspropInitAppName><SecuredCellValue>0</SecuredCellValue><ImpactAnalysis>false</ImpactAnalysis><SQLQueryMode>Calculated</SQLQueryMode><ClientProcessID>6408</ClientProcessID><Cube>Model</Cube><ReturnCellProperties>true</ReturnCellProperties><CommitTimeout>0</CommitTimeout><ForceCommitTimeout>0</ForceCommitTimeout><ExecutionMode>Execute</ExecutionMode><RealTimeOlap>false</RealTimeOlap><MdxMissingMemberMode>Default</MdxMissingMemberMode><DisablePrefetchFacts>false</DisablePrefetchFacts><UpdateIsolationLevel>2</UpdateIsolationLevel><DbpropMsmdOptimizeResponse>0</DbpropMsmdOptimizeResponse><ResponseEncoding>Default</ResponseEncoding><DirectQueryMode>Default</DirectQueryMode><DbpropMsmdActivityID>4ea2a372-dd2f-4edd-a8ca-1b909b4165b5</DbpropMsmdActivityID><DbpropMsmdRequestID>2313cf77-b881-015d-e6da-eda9846d42db</DbpropMsmdRequestID><LocaleIdentifier>1033</LocaleIdentifier><EffectiveUserName>rita@contoso.com</EffectiveUserName></PropertyList>

Basierend auf den effektiven Anforderungen des Benutzernamens konvertiert Analysis Services die Anforderung in die tatsächliche Anmeldeinformation contoso\rita, nachdem die lokale Active Directory-Instanz abgefragt wurde.Based on the effective user name request, Analysis Services converts the request to the actual contoso\rita credential after querying the local Active Directory. Sobald Analysis Services die Anmeldeinformationen abgerufen hat, gibt der Dienst die Daten zurück, die der Benutzer anzeigen und auf die er zugreifen darf.Once Analysis Services gets the credential, Analysis Services returns the data the user has permission to view and access.

Wenn im Dashboard weitere Aktivitäten auftreten, wird im SQL Profiler eine spezifische Abfrage angezeigt, die als DAX-Abfrage wieder an das Analysis Services-Tabellenmodell zurückgegeben wird.If more activity occurs with the dashboard, with SQL Profiler you would see a specific query coming back to the Analysis Services tabular model as a DAX query. Wenn Rita beispielsweise vom Dashboard zum zugrunde liegenden Bericht wechselt, erfolgt die folgende Abfrage.For example, if Rita goes from the dashboard to the underlying report, the following query occurs.

DAX-Abfrage wird an das Analysis Services-Modell zurückgegeben

Sie können unten auch die DAX-Abfrage sehen, die ausgeführt wird, um die Berichtsdaten aufzufüllen.You can also see below the DAX query that is getting executed to populate report data.

EVALUATE
  ROW(
    "SumEmployeeKey", CALCULATE(SUM(Employee[EmployeeKey]))
  )

<PropertyList xmlns="urn:schemas-microsoft-com:xml-analysis">``
          <Catalog>DefinedSalesTabular</Catalog>
          <Cube>Model</Cube>
          <SspropInitAppName>PowerBI</SspropInitAppName>
          <EffectiveUserName>rita@contoso.com</EffectiveUserName>
          <LocaleIdentifier>1033</LocaleIdentifier>
          <ClientProcessID>6408</ClientProcessID>
          <Format>Tabular</Format>
          <Content>SchemaData</Content>
          <Timeout>600</Timeout>
          <DbpropMsmdRequestID>8510d758-f07b-a025-8fb3-a0540189ff79</DbpropMsmdRequestID>
          <DbPropMsmdActivityID>f2dbe8a3-ef51-4d70-a879-5f02a502b2c3</DbPropMsmdActivityID>
          <ReturnCellProperties>true</ReturnCellProperties>
          <DbpropMsmdFlattened2>true</DbpropMsmdFlattened2>
          <DbpropMsmdActivityID>f2dbe8a3-ef51-4d70-a879-5f02a502b2c3</DbpropMsmdActivityID>
        </PropertyList>

ÜberlegungenConsiderations

  • Die lokale Sicherheit auf Zeilenebene von Power BI ist nur bei einer Liveverbindung verfügbar.On-premises row-level security with Power BI is only available with live connection.

  • Alle Änderungen an Daten, die nach der Modellverarbeitung vorgenommen werden, stehen unmittelbar allen Benutzern zur Verfügung, die über eine Liveverbindung aus dem Power BI-Dienst auf den Bericht zugreifen.Any changes in the data after processing the model would be immediately available for the users accessing the report with live connection from the Power BI service.