Dela via


Implementera säkerhet på radnivå i en lokal Analysis Services-tabellmodell

Med hjälp av en exempelsemantisk modell för att gå igenom stegen nedan visar den här självstudien hur du implementerar säkerhet på radnivå i en lokal Analysis Services-tabellmodell och använder den i en Power BI-rapport.

  • Skapa en ny säkerhetstabell i databasen AdventureworksDW2012
  • Skapa tabellmodellen med nödvändiga fakta- och dimensionstabeller
  • Definiera användarroller och behörigheter
  • Distribuera modellen till en Analysis Services-tabellinstans
  • Skapa en Power BI Desktop-rapport som visar data som är skräddarsydda för användaren som kommer åt rapporten
  • Distribuera rapporten till Power BI-tjänst
  • Skapa en ny instrumentpanel baserat på rapporten
  • Dela instrumentpanelen med dina medarbetare

Den här självstudien kräver databasen AdventureworksDW2012.

Uppgift 1: Skapa användarsäkerhetstabellen och definiera datarelation

Du hittar många artiklar som beskriver hur du definierar dynamisk säkerhet på radnivå med tabellmodellen SQL Server Analysis Services (SSAS).

Stegen här kräver att du använder relationsdatabasen AdventureworksDW2012.

  1. I AdventureworksDW2012 skapar du DimUserSecurity tabellen enligt nedan. Du kan använda SQL Server Management Studio (SSMS) för att skapa tabellen.

    Skapa DimUserSecurity-tabell

  2. När du har skapat och sparat tabellen måste du upprätta relationen mellan DimUserSecurity tabellens SalesTerritoryID kolumn och DimSalesTerritory tabellens SalesTerritoryKey kolumn, enligt nedan.

    Högerklicka på DimUserSecurity i SSMS och välj Design. Välj sedan Tabelldesignerrelationer>.... Spara tabellen när du är klar.

    Sekundärnyckelrelationer

  3. Lägg till användare i tabellen. Högerklicka på DimUserSecurity och välj Redigera de 200 översta raderna. När du har lagt till användare DimUserSecurity bör tabellen se ut ungefär som i följande exempel:

    DimUserSecurity-tabell med exempelanvändare

    Du kommer att se dessa användare i kommande uppgifter.

  4. Gör sedan en inre koppling till DimSalesTerritory tabellen, som visar information om användarassocierad region. SQL-koden här gör den inre kopplingen, och bilden visar hur tabellen sedan visas.

    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]
    

    Den anslutna tabellen visar vem som ansvarar för varje försäljningsregion tack vare relationen som skapades i steg 2. Du kan till exempel se att Rita Santos ansvarar för Australien.

Uppgift 2: Skapa tabellmodellen med fakta- och dimensionstabeller

När ditt relationsdatalager är på plats måste du definiera tabellmodellen. Du kan skapa modellen med SQL Server Data Tools (SSDT). Mer information finns i Skapa ett nytt tabellmodellprojekt.

  1. Importera alla nödvändiga tabeller till modellen enligt nedan.

    Importerad SQL Server för användning med dataverktyg

  2. När du har importerat de nödvändiga tabellerna måste du definiera en roll som kallas SalesTerritoryUsers med läsbehörighet. Välj menyn Modell i SQL Server Data Tools och välj sedan Roller. I Rollhanteraren väljer du Ny.

  3. Under Medlemmar i rollhanteraren lägger du till de användare som du definierade i DimUserSecurity tabellen i Uppgift 1.

    Lägga till användare i Rollhanteraren

  4. Lägg sedan till rätt funktioner för både DimSalesTerritory tabeller och DimUserSecurity tabeller enligt nedan under fliken Radfilter .

    Lägga till funktioner i radfilter

  5. Funktionen LOOKUPVALUE returnerar värden för en kolumn där Windows-användarnamnet matchar det som USERNAME funktionen returnerar. Du kan sedan begränsa frågor till var de LOOKUPVALUE returnerade värdena matchar dem i samma eller relaterade tabell. I kolumnen DAX-filter skriver du följande formel:

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

    I den här formeln LOOKUPVALUE returnerar funktionen alla värden för DimUserSecurity[SalesTerritoryID] kolumnen, där DimUserSecurity[UserName] är samma som det aktuella inloggade Windows-användarnamnet DimSalesTerritory[SalesTerritoryKey]och DimUserSecurity[SalesTerritoryID] är samma som .

    Viktigt!

    När du använder säkerhet på radnivå stöds inte DAX-funktionen USERELATIONSHIP .

    Uppsättningen med försäljningsreturer SalesTerritoryKeyLOOKUPVALUE används sedan för att begränsa raderna som visas i DimSalesTerritory. Endast rader där värdet SalesTerritoryKey finns i de ID:n som LOOKUPVALUE funktionen returnerar visas.

  6. DimUserSecurity Lägg till följande formel i kolumnen DAX-filter för tabellen:

        =FALSE()
    

    Den här formeln anger att alla kolumner matchas till , vilket innebär DimUserSecurity att falsetabellkolumner inte kan frågas.

Nu måste du bearbeta och distribuera modellen. Mer information finns i Distribuera.

Uppgift 3: Lägga till datakällor i din lokala datagateway

När din tabellmodell har distribuerats och är redo för förbrukning måste du lägga till en datakällanslutning till din lokala Analysis Services-tabellserver.

  1. För att ge Power BI-tjänst åtkomst till din lokala analystjänst behöver du en lokal datagateway installerad och konfigurerad i din miljö.

  2. När gatewayen är korrekt konfigurerad måste du skapa en datakällaanslutning för din Analysis Services-tabellinstans . Mer information finns i Hantera din datakälla – Analysis Services.

    Skapa anslutning till datakälla

När den här proceduren är klar är gatewayen konfigurerad och redo att interagera med din lokala Analysis Services-datakälla.

Uppgift 4: Skapa en rapport baserat på analysis services-tabellmodellen med Power BI Desktop

  1. Starta Power BI Desktop och välj Hämta datadatabas>.

  2. I listan över datakällor väljer du SQL Server Analysis Services-databasen och väljer Anslut.

    Anslut till SQL Server Analysis Services Database

  3. Fyll i information om analysis services-tabellinstansen och välj Anslut live. Välj sedan OK.

    Analysis Services-information

    Med Power BI fungerar dynamisk säkerhet endast med en live-anslutning.

  4. Du kan se att den distribuerade modellen finns i Analysis Services-instansen. Välj respektive modell och välj sedan OK.

    Power BI Desktop visar nu alla tillgängliga fält till höger om arbetsytan i fönstret Fält .

  5. I fönstret Fält väljer du måttet SalesAmount från tabellen FactInternetSales och dimensionen SalesTerritoryRegion från tabellen SalesTerritory .

  6. För att hålla den här rapporten enkel lägger vi inte till fler kolumner just nu. Om du vill ha en mer meningsfull datarepresentation ändrar du visualiseringen till Ringdiagram.

    Visualisering av ringdiagram

  7. När rapporten är klar kan du publicera den direkt till Power BI-portalen. I menyfliksområdet Start i Power BI Desktop väljer du Publicera.

Uppgift 5: Skapa och dela en instrumentpanel

Du har skapat rapporten och publicerat den till Power BI-tjänsten . Nu kan du använda exemplet som skapades i föregående steg för att demonstrera modellsäkerhetsscenariot.

I rollen som Sales Manager kan användaren Grace se data från alla olika försäljningsregioner. Grace skapar den här rapporten och publicerar den till Power BI-tjänst. Den här rapporten skapades i föregående uppgifter.

När Grace publicerar rapporten är nästa steg att skapa en instrumentpanel i Power BI-tjänst med namnet TabularDynamicSec baserat på rapporten. I följande bild ser du att Grace kan se de data som motsvarar alla försäljningsregioner.

Power BI-tjänst instrumentpanel

Nu delar Grace instrumentpanelen med en kollega, Rita, som ansvarar för försäljningen i Australien-regionen.

Dela en Power BI-instrumentpanel

När Rita loggar in på Power BI-tjänst och visar den delade instrumentpanelen som Grace skapade visas endast försäljning från Australien-regionen.

Grattis! Power BI-tjänst visar den dynamiska säkerhet på radnivå som definierats i den lokala Analysis Services-tabellmodellen. Power BI använder EffectiveUserName egenskapen för att skicka den aktuella Power BI-användarautentiseringsuppgiften till den lokala datakällan för att köra frågorna.

Uppgift 6: Förstå vad som händer i bakgrunden

Den här uppgiften förutsätter att du är bekant med SQL Server Profiler, eftersom du behöver samla in en SQL Server profiler-spårning på din lokala SSAS-tabellinstans.

Sessionen initieras så snart användaren Rita kommer åt instrumentpanelen i Power BI-tjänst. Du kan se att rollen salesterritoryusers får en omedelbar effekt med det effektiva användarnamnet som <EffectiveUserName>rita@contoso.com</EffectiveUserName>

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

Baserat på den effektiva begäran om användarnamn konverterar Analysis Services begäran till den faktiska contoso\rita autentiseringsuppgiften efter att ha frågat den lokala Active Directory. När Analysis Services hämtar autentiseringsuppgifterna returnerar Analysis Services de data som användaren har behörighet att visa och komma åt.

Om mer aktivitet inträffar med instrumentpanelen ser du med SQL Profiler en specifik fråga som kommer tillbaka till Analysis Services-tabellmodellen som en DAX-fråga. Om Rita till exempel går från instrumentpanelen till den underliggande rapporten inträffar följande fråga.

DAX-frågan kommer tillbaka till Analysis Services-modellen

Du kan också se under DAX-frågan som körs för att fylla i rapportdata.

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>

Att tänka på

  • Lokal säkerhet på radnivå med Power BI är endast tillgängligt med live-anslutning.

  • Ändringar i data efter bearbetning av modellen blir omedelbart tillgängliga för användare som kommer åt rapporten med live-anslutning från Power BI-tjänst.