ใช้การรักษาความปลอดภัยระดับแถวในแบบจําลองตาราง Analysis Services ภายในองค์กร

ใช้แบบจําลองความหมายตัวอย่างเพื่อทํางานผ่านขั้นตอนด้านล่าง บทช่วยสอนนี้จะแสดงวิธีใช้การรักษาความปลอดภัยระดับแถวในรูปแบบตาราง Analysis Services ภายในองค์กรและใช้ในรายงาน Power BI

  • สร้างตารางความปลอดภัยใหม่ใน ฐานข้อมูล AdventureworksDW2012
  • สร้างแบบจําลองตารางด้วยตารางข้อเท็จจริงและมิติข้อมูลที่จําเป็น
  • กําหนดบทบาทและสิทธิ์ของผู้ใช้
  • ปรับใช้แบบจําลองไปยัง อินสแตนซ์ตาราง Analysis Services
  • สร้างรายงาน Power BI Desktop ที่แสดงข้อมูลที่กําหนดให้เหมาะสมกับการเข้าถึงรายงานของผู้ใช้
  • ปรับใช้รายงานกับบริการของ Power BI
  • สร้างแดชบอร์ดใหม่โดยยึดตามรายงาน
  • แชร์แดชบอร์ดกับเพื่อนร่วมงานของคุณ

บทช่วยสอนนี้จําเป็นต้องใช้ ฐานข้อมูล AdventureworksDW2012

งานที่ 1: สร้างตารางความปลอดภัยของผู้ใช้และกําหนดความสัมพันธ์ข้อมูล

คุณสามารถหาบทความมากมายที่อธิบายถึงวิธีกําหนดระดับการรักษาความปลอดภัยแบบไดนามิกระดับแถวด้วย รูปแบบตาราง SQL Server Analysis Services (SSAS)

ขั้นตอนในส่วนนี้จําเป็นต้องใช้ฐานข้อมูลเชิงสัมพันธ์ AdventureworksDW2012

  1. ใน AdventureworksDW2012 สร้าง DimUserSecurity ตารางดังที่แสดงด้านล่าง คุณสามารถใช้ SQL Server Management Studio (SSMS) เพื่อสร้างตารางได้

    สร้างตาราง DimUserSecurity

  2. เมื่อคุณสร้างและบันทึกตารางแล้ว คุณจําเป็นต้องสร้างความสัมพันธ์ระหว่าง DimUserSecurity คอลัมน์ของ SalesTerritoryID ตารางและ DimSalesTerritory คอลัมน์ของ SalesTerritoryKey ตาราง ดังที่แสดงด้านล่าง

    ใน SSMS คลิกขวาที่ DimUserSecurity และเลือก ออกแบบ จากนั้นเลือก ความสัมพันธ์ของตัวออกแบบ>ตาราง... เมื่อทําเสร็จแล้ว ให้บันทึกตาราง

    Foreign Key Relationships

  3. เพิ่มผู้ใช้ลงในตาราง คลิกขวาที่ DimUserSecurity และเลือก แก้ไข 200 แถวยอดนิยม เมื่อคุณเพิ่มผู้ใช้แล้ว DimUserSecurity ตารางควรปรากฏคล้ายกับตัวอย่างต่อไปนี้:

    ตาราง DimUserSecurity พร้อมผู้ใช้ตัวอย่าง

    คุณจะเห็นผู้ใช้เหล่านี้ในงานที่กําลังจะเกิดขึ้น

  4. ถัดไป ดําเนินการ การรวม ภายในกับ DimSalesTerritory ตาราง ซึ่งจะแสดงรายละเอียดภูมิภาคที่เกี่ยวข้องกับผู้ใช้ รหัส SQL ในส่วนนี้มีการรวมภายใน และรูปภาพจะแสดงวิธีการที่ตารางปรากฏขึ้น

    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 ตัวอย่างเช่น คุณสามารถดู Rita Santos ที่รับผิดชอบในออสเตรเลียได้

งานที่ 2: สร้างแบบจําลองตารางด้วยตารางข้อเท็จจริงและมิติข้อมูล

เมื่อคลังข้อมูลเชิงสัมพันธ์ของคุณพร้อมใช้งาน คุณจะต้องกําหนดแบบจําลองตาราง คุณสามารถสร้างแบบจําลองได้โดยใช้ SQL Server Data Tools (SSDT) สําหรับข้อมูลเพิ่มเติม ดู สร้างโครงการแบบจําลองตารางใหม่

  1. นําเข้าตารางที่จําเป็นทั้งหมดลงในแบบจําลองดังที่แสดงด้านล่าง

    SQL Server ที่นําเข้าสําหรับใช้กับเครื่องมือข้อมูล

  2. เมื่อคุณนําเข้าตารางที่จําเป็น คุณต้องกําหนดบทบาทที่เรียกว่า SalesTerritoryUsers ที่มีสิทธิ์แบบอ่าน เลือกเมนู แบบจําลอง ใน SQL Server Data Tools จากนั้นเลือก บทบาท ใน ตัวจัดการบทบาท เลือก ใหม่

  3. ใต้สมาชิกในตัวจัดการบทบาท ให้เพิ่มผู้ใช้ที่คุณกําหนดไว้ในDimUserSecurityตารางใน งาน 1

    เพิ่มผู้ใช้ในตัวจัดการบทบาท

  4. ถัดไป เพิ่มฟังก์ชันที่เหมาะสมสําหรับตาราง DimSalesTerritory และ DimUserSecurity ดังที่แสดงด้านล่างภายใต้ แท็บ ตัวกรอง แถว

    เพิ่มฟังก์ชันลงในตัวกรองแถว

  5. ฟังก์ชัน LOOKUPVALUE จะแสดงค่าสําหรับคอลัมน์ที่ชื่อผู้ใช้ Windows ตรงกับรายการที่ USERNAME ฟังก์ชันส่งกลับ จากนั้นคุณสามารถจํากัดคิวรีไปยังตําแหน่งที่ค่าที่แสดง LOOKUPVALUE ตรงกับค่าในตารางเดียวกันหรือตารางที่เกี่ยวข้อง ใน คอลัมน์ตัวกรอง DAX ให้พิมพ์สูตรต่อไปนี้:

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

    ในสูตรนี้ ฟังก์ชัน จะแสดงLOOKUPVALUEค่าทั้งหมดสําหรับDimUserSecurity[SalesTerritoryID]คอลัมน์ ซึ่ง DimUserSecurity[UserName] ตรงกับรายการปัจจุบันที่เข้าสู่ระบบด้วยชื่อผู้ใช้ Windows และ DimUserSecurity[SalesTerritoryID] เหมือนกับDimSalesTerritory[SalesTerritoryKey]

    สำคัญ

    เมื่อใช้การรักษาความปลอดภัยระดับแถว ระบบจะไม่รองรับ USERELATIONSHIP ของฟังก์ชัน DAX

    ชุดค่าที่ส่งกลับของLOOKUPVALUEยอดขายSalesTerritoryKeyจะถูกใช้เพื่อจํากัดแถวที่แสดงในDimSalesTerritory เฉพาะแถวที่ SalesTerritoryKey ค่าอยู่ในรหัสเท่านั้นที่ LOOKUPVALUE ฟังก์ชันจะแสดงผลลัพธ์

  6. DimUserSecurityสําหรับตาราง ในคอลัมน์ ตัวกรอง DAX ให้เพิ่มสูตรต่อไปนี้:

        =FALSE()
    

    สูตรนี้ระบุว่า คอลัมน์ทั้งหมดจะ falseแก้ไข ซึ่งหมายความว่า DimUserSecurity คอลัมน์ตารางไม่สามารถสอบถามได้

ในตอนนี้ คุณต้องประมวลผลและปรับใช้แบบจําลอง สําหรับข้อมูลเพิ่มเติม ให้ดู ปรับใช้

งานที่ 3: เพิ่มแหล่งข้อมูลภายในเกตเวย์ข้อมูลภายในองค์กรของคุณ

เมื่อแบบจําลองตารางของคุณถูกปรับใช้และพร้อมสําหรับการใช้ คุณจําเป็นต้องเพิ่มการเชื่อมต่อแหล่งข้อมูลไปยังเซิร์ฟเวอร์ Analysis Services แบบตารางในองค์กรของคุณ

  1. เพื่ออนุญาตให้บริการของ Power BI เข้าถึงบริการการวิเคราะห์ของคุณภายในองค์กรของคุณ คุณจําเป็นต้องติดตั้งเกตเวย์ข้อมูลภายในองค์กรและกําหนดค่าในสภาพแวดล้อมของคุณ

  2. เมื่อเกตเวย์ได้รับการกําหนดค่าอย่างถูกต้อง คุณจําเป็นต้องสร้างการเชื่อมต่อแหล่งข้อมูลสําหรับอินสแตนซ์ตาราง Analysis Services ของคุณ สําหรับข้อมูลเพิ่มเติม ดูจัดการแหล่งข้อมูลของคุณ - Analysis Services

    สร้างการเชื่อมต่อแหล่งข้อมูล

เมื่อขั้นตอนนี้เสร็จสมบูรณ์ เกตเวย์จะถูกกําหนดค่าและพร้อมสําหรับการโต้ตอบกับแหล่งข้อมูล Analysis Services ภายในองค์กรของคุณ

งานที่ 4: สร้างรายงานที่ยึดตามรูปแบบตารางข้อมูล Analysis Services โดยใช้ Power BI desktop

  1. เริ่มต้น Power BI Desktop และเลือก รับฐานข้อมูลข้อมูล>

  2. จากรายการแหล่งข้อมูล ให้เลือกฐานข้อมูล SQL Server Analysis Services และเลือกเชื่อมต่อ

    เชื่อมต่อไปยังฐานข้อมูล SQL Server Analysis Services

  3. กรอกรายละเอียดอินสแตนซ์ของ Analysis Services แบบตาราง และเลือกเชื่อมต่อถ่ายทอดสด จากนั้นเลือก ตกลง

    รายละเอียด Analysis Services

    ด้วย Power BI การรักษาความปลอดภัยแบบไดนามิกจะใช้ได้เฉพาะกับการเชื่อมต่อแบบไลฟ์เท่านั้น

  4. คุณจะเห็นว่าแบบจําลองที่ถูกปรับใช้อยู่ในอินสแตนซ์ของ Analysis Services เลือกแบบจําลองที่เกี่ยวข้อง แล้วเลือกตกลง

    ในตอนนี้ Power BI Desktop จะแสดงเขตข้อมูลทั้งหมดที่พร้อมใช้งาน ทางด้านขวาของพื้นที่ทํางานในบานหน้าต่างเขตข้อมูล

  5. ในบานหน้าต่างเขตข้อมูล ให้เลือกหน่วยวัด SalesAmount จากตาราง FactInternetSales และมิติ SalesTerritoryRegion จากตาราง SalesTerritory

  6. เพื่อเก็บรายงานนี้อย่างง่ายๆ เราจะไม่เพิ่มคอลัมน์ใดๆ อีกในตอนนี้ เมื่อต้องการแสดงสื่อความหมายของข้อมูลให้มากขึ้น ให้เปลี่ยนการแสดงภาพเป็น แผนภูมิโดนัท

    การแสดงภาพข้อมูลแผนภูมิโดนัท

  7. เมื่อรายงานของคุณพร้อมแล้ว คุณสามารถเผยแพร่ไปยังพอร์ทัล Power BI ได้โดยตรง จากริบบอน หน้าแรก ใน Power BI Desktop ให้เลือก เผยแพร่

งานที่ 5: สร้างและแชร์แดชบอร์ด

คุณได้สร้างรายงานและเผยแพร่ไปยังบริการของ Power BI ตอนนี้คุณสามารถใช้ตัวอย่างที่สร้างขึ้นในขั้นตอนก่อนหน้านี้เพื่อสาธิตสถานการณ์ด้านการรักษาความปลอดภัยของแบบจําลอง

ในบทบาทของ ผู้จัดการฝ่ายขาย ผู้ใช้เกรซสามารถดูข้อมูลได้จากทุกภูมิภาคการขาย เกรซสร้างรายงานนี้และเผยแพร่ไปยังบริการของ Power BI รายงานนี้ถูกสร้างขึ้นในงานก่อนหน้านี้

เมื่อเกรซเผยแพร่รายงาน ขั้นตอนต่อไปคือการสร้างแดชบอร์ดในบริการของ Power BI ที่เรียกว่า TabularDynamicSec โดยอิงกับรายงานนั้น ในภาพต่อไปนี้ โปรดสังเกตว่าเกรซสามารถดูข้อมูลที่เกี่ยวข้องกับภูมิภาคการขายทั้งหมดได้

แดชบอร์ดบริการของ Power BI

ตอนนี้ เกรซแชร์แดชบอร์ดกับเพื่อนร่วมงาน ริต้าซึ่งเป็นผู้รับผิดชอบการขายในภูมิภาคออสเตรเลีย

แชร์แดชบอร์ด Power BI

เมื่อริต้าลงชื่อเข้าใช้บริการของ Power BI และดูหน้าแดชบอร์ดที่แชร์ซึ่งเกรซสร้างขึ้น ระบบจะแสดงเฉพาะยอดขายจากภูมิภาคออสเตรเลียเท่านั้น

ยินดีด้วย! บริการของ Power BI จะแสดงการรักษาความปลอดภัยระดับแถวแบบไดนามิกที่กําหนดไว้ในรูปแบบตารางข้อมูล Analysis Services ในองค์กร Power BI ใช้ EffectiveUserName คุณสมบัติ เพื่อส่งข้อมูลประจําตัวผู้ใช้ Power BI ปัจจุบันไปยังแหล่งข้อมูลภายในองค์กรเพื่อเรียกใช้คิวรี

งานที่ 6: ทําความเข้าใจกับสิ่งที่เกิดขึ้นเบื้องหลัง

งานนี้อนุมานว่าคุณคุ้นเคยกับ SQL Server Profiler เนื่องจากคุณจําเป็นต้องจับภาพการติดตามโปรไฟล์ของ SQL Server ในอินสแตนซ์ตารางแบบ SSAS ในองค์กรของคุณ

เซสชันได้รับการเตรียมใช้งานทันทีที่ผู้ใช้ ซึ่งคือ ริต้า เข้าถึงแดชบอร์ดในบริการของ Power BI คุณจะเห็นว่า บทบาท salesterritoryusers มีผลทันทีโดยชื่อผู้ใช้ที่มีประสิทธิภาพเป็น <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>

ตามคําขอชื่อผู้ใช้ที่มีประสิทธิภาพ Analysis Services จะแปลงคําขอเป็นข้อมูลประจําตัวจริง contoso\rita หลังจากคิวรี Active Directory ในเครื่อง เมื่อ Analysis Services ได้รับข้อมูลประจําตัว Analysis Services จะส่งกลับข้อมูลที่ผู้ใช้มีสิทธิ์ในการดูและเข้าถึง

หากมีกิจกรรมอื่นๆ เกิดขึ้นกับแดชบอร์ด ด้วย SQL Profiler คุณจะเห็นคิวรีเฉพาะอย่างไปยังรูปแบบตารางข้อมูล Analysis Services ในฐานะเป็นคิวรี DAX ตัวอย่างเช่น ถ้าริต้าไปจากแดชบอร์ดไปยังรายงานพื้นฐาน คิวรีต่อไปนี้จะเกิดขึ้น

คิวรี DAX กลับมายังแบบจําลอง Analysis Services

คุณยังสามารถดูคิวรี DAX ที่กําลังดําเนินการเพื่อใส่ข้อมูลรายงาน

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>

ข้อควรพิจารณา

  • การรักษาความปลอดภัยระดับแถวในองค์กรด้วย Power BI จะใช้ได้เฉพาะกับการเชื่อมต่อแบบไลฟ์เท่านั้น

  • การเปลี่ยนแปลงข้อมูลหลังจากประมวลผลแบบจําลองจะพร้อมใช้งานในทันทีสําหรับผู้ใช้ที่เข้าถึงรายงานด้วยการเชื่อมต่อแบบสดจากบริการของ Power BI