온-프레미스 Analysis Services 테이블 형식 모델에서 행 수준 보안 구현Implement row-level security in an on-premises Analysis Services tabular model

샘플 데이터 세트를 사용하여 아래 단계를 진행하기 위해 이 자습서는 온-프레미스 Analysis Services 테이블 형식 모델 에서 행 수준 보안을 구현하고 Power BI 보고서에서 사용하는 방법을 보여 줍니다.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.

  • AdventureworksDW2012 데이터베이스에서 새 보안 테이블 만들기Create a new security table in the AdventureworksDW2012 database
  • 필요한 팩트 및 차원 테이블을 사용하여 테이블 형식 모델 빌드Build the tabular model with necessary fact and dimension tables
  • 사용자 역할 및 사용 권한 정의Define user roles and permissions
  • Analysis Services 테이블 형식 인스턴스에 모델 배포Deploy the model to an Analysis Services tabular instance
  • 보고서에 액세스하는 사용자에게 맞는 데이터를 표시하는 Power BI Desktop 보고서 작성Build a Power BI Desktop report that displays data tailored to the user accessing the report
  • Power BI 서비스 에 보고서 배포Deploy the report to Power BI service
  • 보고서를 기반으로 새 대시보드 만들기Create a new dashboard based on the report
  • 동료와 대시보드 공유Share the dashboard with your coworkers

이 자습서에는 AdventureworksDW2012 데이터베이스가 필요합니다.This tutorial requires the AdventureworksDW2012 database.

작업 1: 사용자 보안 테이블 만들기 및 데이터 관계 정의Task 1: Create the user security table and define data relationship

SSAS(SQL Server Analysis Services) 테이블 형식 모델을 사용하여 행 수준 동적 보안을 정의하는 방법을 설명하는 여러 문서를 찾을 수 있습니다.You can find many articles describing how to define row-level dynamic security with the SQL Server Analysis Services (SSAS) tabular model. 예제에서는 행 필터를 사용하여 동적 보안 구현을 사용합니다.For our sample, we use Implement Dynamic Security by Using Row Filters.

여기의 단계에서는 AdventureworksDW2012 관계형 데이터베이스를 사용해야 합니다.The steps here require using the AdventureworksDW2012 relational database.

  1. AdventureworksDW2012에서 아래와 같이 DimUserSecurity 테이블을 만듭니다.In AdventureworksDW2012, create the DimUserSecurity table as shown below. SSMS(SQL Server Management Studio)를 사용하여 테이블을 만들 수 있습니다.You can use SQL Server Management Studio (SSMS) to create the table.

    DimUserSecurity 테이블 만들기

  2. 테이블을 만들고 저장한 후에는 아래와 같이 DimUserSecurity 테이블의 SalesTerritoryID 열과 DimSalesTerritory 테이블의 SalesTerritoryKey 열 간의 관계를 설정해야 합니다.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.

    SSMS에서 DimUserSecurity 를 마우스 오른쪽 단추로 클릭하고 디자인 을 선택합니다.In SSMS, right-click DimUserSecurity , and select Design . 그런 다음 테이블 디자이너 > 관계... 를 선택합니다. 완료되면 테이블을 저장합니다.Then select Table Designer > Relationships... . When done, save the table.

    외래 키 관계

  3. 테이블에 사용자를 추가하세요.Add users to the table. DimUserSecurity 를 마우스 오른쪽 단추로 클릭하고 상위 200개의 행 편집 을 선택합니다.Right-click DimUserSecurity and select Edit Top 200 Rows . 사용자를 추가하면 DimUserSecurity 테이블은 다음 예제와 유사하게 표시됩니다.Once you've added users, the DimUserSecurity table should appear similar to the following example:

    예제 사용자를 포함한 DimUserSecurity 테이블

    이후 작업에서 이러한 사용자를 볼 수 있습니다.You'll see these users in upcoming tasks.

  4. 다음으로 사용자 관련 지역 세부 정보를 보여 주는 DimSalesTerritory 테이블을 사용하여 내부 조인 을 수행합니다.Next, do an inner join with the DimSalesTerritory table, which shows the user associated region details. 여기에서 SQL 코드는 내부 조인을 수행하고, 이미지는 테이블이 나타나는 방법을 보여줍니다.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]
    

    조인된 테이블은 2단계에서 만든 관계 덕분에 각 영업 영역에 대한 책임이 있는 사람을 보여 줍니다.The joined table shows who is responsible for each sales region, thanks to the relationship created in Step 2. 예를 들어 Rita Santos오스트레일리아 담당임을 알 수 있습니다.For example, you can see that Rita Santos is responsible for Australia .

작업 2: 팩트 및 차원 테이블을 사용하여 테이블 형식 모델 만들기Task 2: Create the tabular model with facts and dimension tables

관계형 데이터 웨어하우스가 준비되면 테이블 형식 모델을 정의해야 합니다.Once your relational data warehouse is in place, you need to define the tabular model. SSDT(SQL Server Data Tools)를 사용하여 모델을 만들 수 있습니다.You can create the model using SQL Server Data Tools (SSDT). 자세한 내용은 새 테이블 형식 모델 프로젝트 만들기를 참조하세요.For more information, see Create a New Tabular Model Project.

  1. 아래와 같이 필요한 모든 테이블을 모델로 가져옵니다.Import all the necessary tables into the model as shown below.

    데이터 도구와 함께 사용하기 위해 가져온 SQL Server

  2. 필요한 테이블을 가져오면 읽기 권한으로 SalesTerritoryUsers 라는 역할을 정의해야 합니다.Once you've imported the necessary tables, you need to define a role called SalesTerritoryUsers with Read permission. SQL Server Data Tools에서 모델 메뉴를 선택한 다음, 역할 을 선택합니다.Select the Model menu in SQL Server Data Tools, and then select Roles . 역할 관리자 에서 새로 만들기 를 선택합니다.In Role Manager , select New .

  3. 역할 관리자 안의 멤버 에서 작업 1단계DimUserSecurity 테이블에서 정의한 사용자를 추가합니다.Under Members in the Role Manager , add the users that you defined in the DimUserSecurity table in Task 1.

    역할 관리자에서 사용자 추가

  4. 그런 다음 행 필터 탭에 나와있는 것처럼 DimSalesTerritoryDimUserSecurity 테이블 모두에 적절한 함수를 추가합니다.Next, add the proper functions for both DimSalesTerritory and DimUserSecurity tables, as shown below under Row Filters tab.

    행 필터에 함수 추가

  5. LOOKUPVALUE 함수는 Windows 사용자 이름이 USERNAME 함수가 반환하는 사용자 이름과 일치하는 열에 대한 값을 반환합니다.The LOOKUPVALUE function returns values for a column in which the Windows user name matches the one the USERNAME function returns. 그런 다음, LOOKUPVALUE 반환된 값이 동일한 또는 관련 테이블의 값과 일치하도록 쿼리를 제한할 수 있습니다.You can then restrict queries to where the LOOKUPVALUE returned values match ones in the same or related table. DAX 필터 열에서 다음 수식을 입력합니다.In the DAX Filter column, type the following formula:

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

    이 수식에서 LOOKUPVALUE 함수는 DimUserSecurity[SalesTerritoryID] 열의 모든 값을 반환합니다. 여기서 DimUserSecurity[UserName]은 현재 로그인한 Windows 사용자 이름과 같으며 DimUserSecurity[SalesTerritoryID]DimSalesTerritory[SalesTerritoryKey]와 동일합니다.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].

    중요

    행 수준 보안을 사용하는 경우 DAX 함수 USERELATIONSHIP은 지원되지 않습니다.When using row-level security, the DAX function USERELATIONSHIP is not supported.

    그러면 판매 SalesTerritoryKeyLOOKUPVALUE 반환된 세트는 DimSalesTerritory에 표시된 행을 제한하는 데 사용됩니다.The set of Sales SalesTerritoryKey's LOOKUPVALUE returns is then used to restrict the rows shown in the DimSalesTerritory. SalesTerritoryKey 값이 LOOKUPVALUE 함수가 반환하는 ID에 있는 행만 표시됩니다.Only rows where the SalesTerritoryKey value is in the IDs that the LOOKUPVALUE function returns are displayed.

  6. DimUserSecurity 테이블의 경우 DAX 필터 열에서 다음 수식을 추가합니다.For the DimUserSecurity table, in the DAX Filter column, add the following formula:

        =FALSE()
    

    이 수식은 모든 열이 false로 해결되도록 지정합니다. 즉 DimUserSecurity 테이블 열은 쿼리될 수 없습니다.This formula specifies that all columns resolve to false; meaning DimUserSecurity table columns can't be queried.

이제 모델을 처리하고 배포해야 합니다.Now you need to process and deploy the model. 자세한 내용은 배포를 참조하세요.For more information, see Deploy.

작업 3: 온-프레미스 데이터 게이트웨이 내에서 데이터 원본 추가Task 3: Add Data Sources within your On-premises data gateway

테이블 형식 모델이 배포되고 사용 준비가 되면 온-프레미스 Analysis Services 테이블 형식 서버에 데이터 원본 연결을 추가해야 합니다.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. 온-프레미스 분석 서비스에 대한 Power BI 서비스 액세스를 허용하려면 사용자 환경에 온-프레미스 데이터 게이트웨이를 설치하고 구성해야 합니다.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. 게이트웨이가 올바르게 구성되었으면 Analysis Services 테이블 형식 인스턴스에 대한 데이터 원본 연결을 만들어야 합니다.Once the gateway is correctly configured, you need to create a data source connection for your Analysis Services tabular instance. 자세한 내용은 데이터 원본 관리 - Analysis Services를 참조하세요.For more information, see Manage your data source - Analysis Services.

    데이터 원본 연결을 만드세요.

이 프로시저를 완료하여 게이트웨이가 구성되고 온-프레미스 Analysis Services 데이터 원본과 상호 작용할 준비가 되었습니다.With this procedure complete, the gateway is configured and ready to interact with your on-premises Analysis Services data source.

작업 4: Power BI Desktop을 사용하여 Analysis Services 테이블 형식 모델 기반 보고서 만들기Task 4: Create report based on analysis services tabular model using Power BI desktop

  1. Power BI Desktop을 시작하고, 데이터 가져오기 > 데이터베이스 를 선택합니다.Start Power BI Desktop and select Get Data > Database .

  2. 데이터 원본 목록에서 SQL Server Analysis Services 데이터베이스 를 선택하고 연결 을 선택합니다.From the data sources list, select the SQL Server Analysis Services Database and select Connect .

    SQL Server Analysis Services 데이터베이스에 연결

  3. Analysis Services 테이블 형식 인스턴스 세부 정보를 입력하고 라이브 연결 을 선택합니다.Fill in your Analysis Services tabular instance details and select Connect live . 그런 다음, 확인 을 선택합니다.Then select OK .

    Analysis Services 세부 정보

    Power BI에서 동적 보안은 라이브 연결만을 사용하여 작동합니다.With Power BI, dynamic security works only with a live connection.

  4. Analysis Services 인스턴스에 배포된 모델이 표시됩니다.You can see that the deployed model is in the Analysis Services instance. 해당 모델을 선택한 다음, 확인 을 선택합니다.Select the respective model and then select OK .

    Power BI Desktop은 이제 필드 창의 캔버스 오른쪽에 사용할 수 있는 모든 필드를 표시합니다.Power BI Desktop now displays all the available fields, to the right of the canvas in the Fields pane.

  5. 필드 창에서 FactInternetSales 테이블의 SalesAmount 측정값 및 SalesTerritory 테이블의 SalesTerritoryRegion 차원을 선택합니다.In the Fields pane, select the SalesAmount measure from the FactInternetSales table and the SalesTerritoryRegion dimension from the SalesTerritory table.

  6. 이 보고서를 간단하게 유지하기 위해 지금 더 많은 열을 추가하지 않습니다.To keep this report simple, we won't add any more columns right now. 좀 더 의미 있는 데이터 표현을 위해 시각화를 도넛형 차트 로 변경합니다.To have a more meaningful data representation, change the visualization to Donut chart .

    도넛형 차트 시각화

  7. 보고서가 준비되면 Power BI 포털에 직접 게시할 수 있습니다.Once your report is ready, you can directly publish it to the Power BI portal. Power BI Desktop의 리본 메뉴 탭에서 게시 를 선택합니다.From the Home ribbon in Power BI Desktop, select Publish .

작업 5: 대시보드 만들기 및 공유Task 5: Create and share a dashboard

보고서를 만들고 Power BI 서비스에 게시했습니다.You've created the report and published it to the Power BI service. 이제 이전 단계에서 만든 예제를 사용하여 모델 보안 시나리오를 보여 줄 수 있습니다.Now you can use the example created in previous steps to demonstrate the model security scenario.

판매 관리자 역할의 사용자 Grace는 다른 모든 판매 지역의 데이터를 볼 수 있습니다.In the role as Sales Manager , the user Grace can see data from all the different sales regions. Grace가 이 보고서를 만들고 Power BI 서비스에 게시합니다.Grace creates this report and publishes it to the Power BI service. 이 보고서는 이전 작업에서 만들었습니다.This report was created in the previous tasks.

Grace가 보고서를 게시한 후 다음 단계는 해당 보고서를 기준으로 Power BI 서비스에서 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. 다음 그림에서 Grace는 모든 판매 지역에 해당하는 데이터를 볼 수 있습니다.In the following image, notice that Grace can see the data corresponding to all the sales region.

Power BI 서비스 대시보드

이제 Grace는 오스트레일리아 지역의 판매 담당인 동료 Rita와 대시보드를 공유합니다.Now Grace shares the dashboard with a colleague, Rita, who is responsible for the Australia region sales.

Power BI 대시보드 공유

Rita가 Power BI 서비스에 로그인하여 Grace가 만든 공유 대시보드를 보면 오스트레일리아 지역의 판매량만 표시됩니다.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.

축하합니다!Congratulations! Power BI 서비스는 온-프레미스 Analysis Services 테이블 형식 모델에 정의된 동적 행 수준 보안을 보여줍니다.The Power BI service shows the dynamic row-level security defined in the on-premises Analysis Services tabular model. Power BI는 EffectiveUserName 속성을 사용하여 쿼리를 실행하도록 현재 Power BI 사용자 자격 증명을 온-프레미스 데이터 원본에 전송합니다.Power BI uses the EffectiveUserName property to send the current Power BI user credential to the on-premises data source to run the queries.

작업 6: 내부적으로 수행되는 작업 이해Task 6: Understand what happens behind the scenes

이 작업은 온-프레미스 SSAS 테이블 형식 인스턴스에서 SQL Server 프로파일러 추적을 캡처해야 하므로 SQL Server Profiler와 익숙하다고 가정합니다.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.

세션은 사용자(Rita)가 Power BI 서비스의 대시보드에 액세스하는 즉시 초기화됩니다.The session gets initialized as soon as the user, Rita, accesses the dashboard in the Power BI service. salesterritoryusers 역할이 rita@contoso.com 의 유효 사용자 이름으로 즉시 적용되는 것을 볼 수 있습니다.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>

유효한 사용자 이름 요청에 따라 Analysis Services는 로컬 Active Directory를 쿼리한 후 요청을 실제 contoso\rita 자격 증명으로 변환합니다.Based on the effective user name request, Analysis Services converts the request to the actual contoso\rita credential after querying the local Active Directory. Analysis Services가 자격 증명을 가져오면 Analysis Services는 사용자가 보고 액세스할 수 있는 권한이 있는 데이터를 반환합니다.Once Analysis Services gets the credential, Analysis Services returns the data the user has permission to view and access.

대시보드에서 더 많은 작업이 발생하는 경우, SQL 프로파일러를 사용하여 특정 쿼리가 Analysis Services 테이블 형식 모델에 DAX 쿼리로 돌아오는 것을 볼 수 있습니다.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. 예를 들어 Rita가 대시보드에서 기본 보고서로 이동하는 경우 다음 쿼리가 발생합니다.For example, if Rita goes from the dashboard to the underlying report, the following query occurs.

DAX 쿼리가 Analysis Services 모델로 돌아갑니다.

또한 아래에서 DAX 쿼리가 실행되어 보고서 데이터를 채우는 것을 볼 수 있습니다.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>

고려 사항Considerations

  • Power BI와 온-프레미스 행 수준 보안은 라이브 연결로만 제공됩니다.On-premises row-level security with Power BI is only available with live connection.

  • 모델 처리 후 데이터의 변경 내용은 사용자가 Power BI 서비스에서 라이브 연결로 보고서에 액세스하는 데 즉시 사용할 수 있습니다.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.