แชร์ผ่าน


ฝังรายงานด้วย RLS

นําไปใช้กับ: ผู้ใช้ข้อมูลที่เป็นเจ้าของข้อมูล แอปเป็นเจ้าของข้อมูล

บทความนี้อธิบายวิธีการฝังเนื้อหา Power BI ที่ใช้ RLS ลงในแอป Power BI มาตรฐานที่เป็นเจ้าของแอปพลิเคชันข้อมูล

ข้อกำหนดเบื้องต้น

สําหรับคําอธิบายโดยละเอียดเกี่ยวกับวิธีการตั้งค่า RLS โปรดดูที่ การรักษาความปลอดภัยระดับแถว (RLS) ด้วย Power BI

เมื่อคุณ กําหนดบทบาท RLS ของคุณ โปรดทราบว่านิพจน์ DAX ที่คุณใช้จะกําหนดว่าแบบจําลอง RLS เป็นแบบคงที่หรือแบบไดนามิก

เมื่อต้องใช้การรักษาความปลอดภัยแบบคงที่และการรักษาความปลอดภัยแบบไดนามิก

การรักษาความปลอดภัย แบบคงที่ใช้ค่าคงที่ในตัวกรอง DAX เพื่อกําหนดแต่ละบทบาท การดําเนินการนี้เป็นเรื่องง่าย แต่ยากต่อการบํารุงรักษาเมื่อมีผู้ใช้หรือองค์กรจํานวนมากที่เกี่ยวข้อง

ความปลอดภัยแบบคงที่ทํางานได้ดีที่สุดสําหรับ ISV ที่ให้บริการลูกค้ารายใหญ่หนึ่งรายหรือสองสามราย ซึ่งแต่ละแผนกต้องการเข้าถึงข้อมูลที่แตกต่างกัน

การรักษาความปลอดภัย แบบไดนามิกใช้ฟังก์ชัน DAX (username() หรือ userprincipalname()) เพื่อกําหนดบทบาท การรักษาความปลอดภัยแบบไดนามิกมีความยืดหยุ่นมากขึ้นและช่วยให้คุณสามารถจัดการข้อมูลของคุณโดยใช้บทบาทที่น้อยลงและการบํารุงรักษาน้อยลง

การรักษาความปลอดภัยแบบคงที่

ด้วยบทบาทแบบคงที่ คุณส่งบทบาทไปยัง Power BI เมื่อคุณสร้างโทเค็นแบบฝัง และผู้ใช้จะเห็นข้อมูลตามบทบาทนั้น หากต้องการสร้างบทบาทความปลอดภัยแบบคงที่ ให้ป้อนค่าคงที่ในตัวกรอง DAX

ตัวอย่างเช่น คุณสามารถกําหนดบทบาทของ สหรัฐอเมริกา ตะวันออกเป็น [Region] = "East"

สกรีนช็อตแสดงวิธีการกําหนดบทบาท R L S แบบคงที่

สมมติว่า john@contoso.com เป็นผู้ใช้แอปของคุณ คุณต้องการให้ John เข้าถึงข้อมูลจาก บทบาทสหรัฐอเมริกา ตะวันออก เมื่อต้องฝังรายงานสําหรับ john@contoso.comสร้างโทเค็นแบบฝังโดยใช้ บทบาทสหรัฐอเมริกา ตะวันออก ข้อมูลผลลัพธ์จะถูกกรองสําหรับ[Region] = "East"

หมายเหตุ

เมื่อคุณสร้างโทเค็นแบบฝัง คุณจะต้องใส่ชื่อผู้ใช้ แต่ชื่อผู้ใช้สามารถเป็นสตริงใด ๆ บทบาทแบบคงที่มีค่าคงที่ที่ไม่ขึ้นอยู่กับชื่อผู้ใช้ ดังนั้นเมื่อ ISV กําหนดบทบาทของผู้ใช้และส่งผ่านไปยังโทเค็นแบบฝัง ข้อมูลจะถูกกรองตามบทบาทนั้นโดยไม่คํานึงถึงชื่อผู้ใช้ที่ส่งผ่าน

การรักษาความปลอดภัยแบบไดนามิก

การรักษาความปลอดภัยแบบไดนามิกใช้ฟังก์ชัน DAX (username() หรือ userprincipalname()) เพื่อกําหนดบทบาท

ใน สถานการณ์ผู้ใช้เป็นเจ้าของข้อมูล แบบจําลอง RLS จะกรองข้อมูลโดยอัตโนมัติตามบทบาทของผู้ใช้ที่ระบุ ด้วย แอปเป็นเจ้าของข้อมูล Power BI ไม่ทราบชื่อผู้ใช้ของลูกค้าของ ISV ดังนั้นคุณสามารถใช้ username() ฟังก์ชันเพื่อกรองข้อมูลแบบไดนามิกได้

สร้างบทบาทใน Power BI Desktop โดยใช้ฟังก์ชัน username() ตัวอย่างเช่น คุณสามารถสร้างบทบาทที่เรียกว่า CountryDynamic และกําหนดเป็น [CountryRegionCode] = username()

สกรีนช็อตแสดงวิธีการสร้างบทบาท R L S แบบไดนามิก

สมมติว่าคุณต้องการให้ผู้ใช้jane@contoso.comของคุณ เข้าถึงข้อมูลสําหรับฝรั่งเศส เมื่อคุณสร้างโทเค็นฝังตัวสําหรับ jane@contoso.comคุณจะผ่านสตริงฝรั่งเศสเป็นชื่อผู้ใช้ในบทบาท CountryDynamic ข้อมูลของคุณจะถูกกรองตาม [CountryRegionCode] = ฝรั่งเศส

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "France",
            "roles": [ "CountryDynamic"],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

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

สร้างโทเค็นแบบฝังตัว

เมื่อคุณพร้อมที่จะฝังรายงานลงในแอปของคุณ คุณจําเป็นต้อง สร้างโทเค็นแบบฝังตัว เพื่อสร้างโทเค็นโดยใช้ API โทเค็นฝังตัว ส่งข้อมูลต่อไปนี้ไปยัง API

  • ชื่อผู้ใช้ (จําเป็น) – ถ้าบทบาทเป็นแบบไดนามิก สตริงชื่อผู้ใช้ จะถูกใช้เป็นตัวกรอง สําหรับบทบาทแบบ คงที่ ชื่อผู้ใช้ ไม่มีผลต่อ RLS และสามารถเป็นสตริงใด ๆ เลย เฉพาะชื่อผู้ใช้เดียวเท่านั้นที่สามารถอยู่ในรายการได้
  • บทบาท (จําเป็น) – บทบาทที่ใช้เมื่อนํากฎการรักษาความปลอดภัยระดับแถวไปใช้ ถ้าส่งบทบาทมากกว่าหนึ่งรายการ ควรส่งเป็นอาร์เรย์สตริง
  • ชุดข้อมูล (จําเป็น) – ชุดข้อมูลที่สามารถใช้ได้กับรายการที่คุณกําลังฝัง

ในตอนนี้คุณสามารถฝังรายงานลงในแอปของคุณได้แล้ว รายงานจะกรองข้อมูลตาม RLS ที่ใช้

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
    {
        PowerBIClient pbiClient = this.GetPowerBIClient();

       // Defines the user identity and roles.
        var rlsIdentity = new EffectiveIdentity(
            username: "France",
            roles: new List<string>{ "CountryDynamic" },
            datasets: datasetIds.Select(id => id.ToString()).ToList());
        );
       
        // Create a request for getting an embed token for the rls identity defined above
        var tokenRequest = new GenerateTokenRequestV2(
            reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
            datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
            targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
            identities: new List<EffectiveIdentity> { rlsIdentity }
        );

        // Generate an embed token
        var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

        return embedToken;
    }

ข้อควรพิจารณาและข้อจำกัด

  • คุณอาจจําเป็นต้องดําเนินการหลายขั้นตอนก่อนที่คุณจะสามารถสร้างโทเค็นแบบฝังได้ ทั้งนี้ขึ้นอยู่กับการตั้งค่าของคุณ สําหรับข้อมูลเกี่ยวกับสถานการณ์ที่แตกต่างกัน ดู ฝังรายงานที่ใช้คุณลักษณะการรักษาความปลอดภัย
  • ผู้ใช้ที่สร้างโทเค็นแบบฝังตัวจะต้อง เป็นสมาชิก หรือ ผู้ดูแลระบบ ในทั้งสองพื้นที่ทํางาน (พื้นที่ทํางานชุดข้อมูลและพื้นที่ทํางานรายงาน)
  • เมื่อ สร้างโทเค็นแบบฝัง คุณจะต้องใส่ชื่อผู้ใช้และบทบาท ถ้าคุณไม่เป็นเช่นนั้น หนึ่งในเหตุการณ์ต่อไปนี้จะเกิดขึ้น โดยขึ้นอยู่กับว่าโทเค็นถูกสร้างขึ้นโดยโครงร่างสําคัญของบริการหรือผู้ใช้หลัก:
    • สําหรับบริการหลัก การสร้างโทเค็นล้มเหลว
    • สําหรับผู้ใช้หลัก การสร้างโทเค็นสําเร็จ แต่ไม่มีการกรองข้อมูล (ข้อมูลทั้งหมดจะถูกส่งกลับ)

มีคําถามเพิ่มเติมหรือไม่ ลองใช้ชุมชน Power BI