ฝังรายงานด้วย RLS
นําไปใช้กับ: ผู้ใช้ข้อมูลที่เป็นเจ้าของข้อมูล
แอปเป็นเจ้าของข้อมูล
บทความนี้อธิบายวิธีการฝังเนื้อหา Power BI ที่ใช้ RLS ลงในแอป Power BI มาตรฐานที่เป็นเจ้าของแอปพลิเคชันข้อมูล
ข้อกำหนดเบื้องต้น
สําหรับคําอธิบายโดยละเอียดเกี่ยวกับวิธีการตั้งค่า RLS โปรดดูที่ การรักษาความปลอดภัยระดับแถว (RLS) ด้วย Power BI
เมื่อคุณ กําหนดบทบาท RLS ของคุณ โปรดทราบว่านิพจน์ DAX ที่คุณใช้จะกําหนดว่าแบบจําลอง RLS เป็นแบบคงที่หรือแบบไดนามิก
เมื่อต้องใช้การรักษาความปลอดภัยแบบคงที่และการรักษาความปลอดภัยแบบไดนามิก
การรักษาความปลอดภัย แบบคงที่ใช้ค่าคงที่ในตัวกรอง DAX เพื่อกําหนดแต่ละบทบาท การดําเนินการนี้เป็นเรื่องง่าย แต่ยากต่อการบํารุงรักษาเมื่อมีผู้ใช้หรือองค์กรจํานวนมากที่เกี่ยวข้อง
ความปลอดภัยแบบคงที่ทํางานได้ดีที่สุดสําหรับ ISV ที่ให้บริการลูกค้ารายใหญ่หนึ่งรายหรือสองสามราย ซึ่งแต่ละแผนกต้องการเข้าถึงข้อมูลที่แตกต่างกัน
การรักษาความปลอดภัย แบบไดนามิกใช้ฟังก์ชัน DAX (username()
หรือ userprincipalname()
) เพื่อกําหนดบทบาท การรักษาความปลอดภัยแบบไดนามิกมีความยืดหยุ่นมากขึ้นและช่วยให้คุณสามารถจัดการข้อมูลของคุณโดยใช้บทบาทที่น้อยลงและการบํารุงรักษาน้อยลง
การรักษาความปลอดภัยแบบคงที่
ด้วยบทบาทแบบคงที่ คุณส่งบทบาทไปยัง Power BI เมื่อคุณสร้างโทเค็นแบบฝัง และผู้ใช้จะเห็นข้อมูลตามบทบาทนั้น หากต้องการสร้างบทบาทความปลอดภัยแบบคงที่ ให้ป้อนค่าคงที่ในตัวกรอง DAX
ตัวอย่างเช่น คุณสามารถกําหนดบทบาทของ สหรัฐอเมริกา ตะวันออกเป็น [Region] = "East"
สมมติว่า 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()
สมมติว่าคุณต้องการให้ผู้ใช้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