แชร์ผ่าน


การรักษาความปลอดภัยระดับแถวใน OneLake (ตัวอย่าง)

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

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

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

บังคับใช้การรักษาความปลอดภัยระดับแถว

การรักษาความปลอดภัย OneLake RLS ได้รับการบังคับใช้ในหนึ่งในสองวิธี:

  • ตารางที่กรองแล้วในกลไกจัดการ Fabric: คิวรีไปยังรายการของเครื่องมือ Fabric ที่ได้รับการสนับสนุน เช่น สมุดบันทึก Spark ส่งผลให้ผู้ใช้เห็นเฉพาะแถวที่ได้รับอนุญาตให้ดูตามกฎ RLS
  • บล็อกการเข้าถึงตาราง: ตารางที่มีกฎ RLS ที่ใช้กับตารางเหล่านั้นไม่สามารถอ่านภายนอกกลไกจัดการ Fabric ที่รองรับได้

สําหรับตารางที่กรองแล้ว จะมีลักษณะการทํางานต่อไปนี้:

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

กําหนดกฎการรักษาความปลอดภัยระดับแถว

คุณสามารถกําหนดกฎการรักษาความปลอดภัยระดับแถวให้เป็นส่วนหนึ่งของบทบาทความปลอดภัย OneLake ใด ๆ ที่อนุญาตให้เข้าถึงข้อมูลตารางในรูปแบบปาร์เกต Delta ได้ แถวเป็นแนวคิดที่เกี่ยวข้องกับข้อมูลแบบตารางเท่านั้น ดังนั้นจึงไม่อนุญาตให้มีข้อกําหนด RLS สําหรับโฟลเดอร์ที่ไม่ใช่ตารางหรือข้อมูลที่ไม่มีโครงสร้าง

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

แนวทางปฏิบัติที่ดีที่สุด ให้หลีกเลี่ยงการใช้นิพจน์ RLS ที่คลุมเครือหรือซับซ้อนเกินไป นิพจน์ที่พิมพ์อย่างแรงด้วยการค้นหาจํานวนเต็มหรือสตริงที่มี "=" จะปลอดภัยและเข้าใจง่ายที่สุด

ใช้ขั้นตอนต่อไปนี้เพื่อกําหนดกฎ RLS:

  1. ไปที่ Lakehouse ของคุณ แล้วเลือก จัดการความปลอดภัย OneLake (พรีวิว)

  2. เลือกบทบาทที่มีอยู่ที่คุณต้องการกําหนดความปลอดภัยของตารางหรือโฟลเดอร์ หรือเลือก ใหม่เพื่อสร้างบทบาทใหม่

  3. บนหน้ารายละเอียดบทบาท ให้เลือกตัวเลือกเพิ่มเติม (...) ถัดจากตารางที่คุณต้องการกําหนด RLS จากนั้นเลือก ความปลอดภัยแถว (ตัวอย่าง)

    สกรีนช็อตที่แสดงการเลือก 'ความปลอดภัยแถว' เพื่อแก้ไขสิทธิ์ในตาราง

  4. พิมพ์คําสั่ง SQL สําหรับกําหนดแถวที่คุณต้องการให้ผู้ใช้เห็นในตัวแก้ไขโค้ด ใช้ส่วนกฎไวยากรณ์ สําหรับคําแนะนํา

  5. เลือก บันทึก เพื่อยืนยันกฎความปลอดภัยของแถว

เปิดใช้งานการรักษาความปลอดภัย OneLake สําหรับจุดสิ้นสุดการวิเคราะห์ SQL

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

หมายเหตุ

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

  1. นําทางไปยังจุดสิ้นสุดการวิเคราะห์ SQL

  2. ในประสบการณ์การใช้งานจุดสิ้นสุดการวิเคราะห์ SQL ให้เลือกแท็บ ความปลอดภัย ในริบบอนด้านบน

  3. เลือก ข้อมูลประจําตัวของผู้ใช้ ภายใต้ โหมดการเข้าถึง OneLake

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

  4. ในพร้อมท์ เลือกใช่ใช้ข้อมูลประจําตัวของผู้ใช้

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

ตอนนี้จุดสิ้นสุดการวิเคราะห์ SQL พร้อมใช้งานกับการรักษาความปลอดภัย OneLake แล้ว

กฎไวยากรณ์

กฎการรักษาความปลอดภัยระดับแถวทั้งหมดจะอยู่ในรูปแบบต่อไปนี้:

SELECT * FROM {schema_name}.{table_name} WHERE {column_level_boolean_1}{column_level_boolean_2}...{column_level_boolean_N}

ตัวอย่างเช่น:

SELECT * FROM Sales WHERE Amount>'50000' AND State='CA'

จํานวนอักขระสูงสุดในกฎความปลอดภัยระดับแถวคือ 1000

ตัวกำหนดตำแหน่ง คำอธิบาย
{schema_name} ชื่อของ schema ที่ {table_name} อยู่ ถ้าวัตถุสนับสนุน schema แล้วต้องมี {schema_name}
{table_name} ชื่อของตารางที่เพรดิเคต RLS ถูกนําไปใช้ ค่านี้จะต้องตรงกันทั้งหมดกับชื่อของตาราง หรือผลลัพธ์ RLS ในแถวไม่แสดง
{column_level_boolean} คําสั่งบูลีนที่ประกอบด้วยคอมโพเนนต์ต่อไปนี้:

* ชื่อคอลัมน์: ชื่อของคอลัมน์ใน {table_name} ตามที่ระบุไว้ใน Schema ของบันทึก Delta ชื่อคอลัมน์สามารถจัดรูปแบบได้ทั้งเป็น {column_name} หรือ {table_name} {column_name}
* ตัวดําเนินการ: หนึ่งในตัวดําเนินการที่รองรับ ที่ประเมินชื่อคอลัมน์และค่าเป็นค่าบูลีน
* ค่า: ค่าคงที่หรือชุดของค่าที่จะประเมินเทียบกับ

คุณสามารถมีคําสั่งบูลีนอย่างน้อยหนึ่งคําสั่งที่คั่นด้วย AND หรือ OR

ตัวดําเนินการที่สนับสนุน

กฎการรักษาความปลอดภัยระดับแถวสนับสนุนรายการต่อไปนี้ของตัวดําเนินการและคําสําคัญ:

ตัวดำเนินการ คำอธิบาย
= (เท่ากับ) ประเมินเป็น true ถ้าค่าทั้งสองเป็นชนิดข้อมูลเดียวกันและการจับคู่ที่ตรงกัน
<> (ไม่เท่ากับ) ประเมินเป็น true ถ้าค่าทั้งสองไม่ใช่ชนิดข้อมูลเดียวกัน และไม่ตรงกันทั้งหมด
> (มากกว่า) ประเมินเป็น true ถ้าค่าคอลัมน์มากกว่าค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งมากกว่าสตริงอื่นหรือไม่
>= (มากกว่าหรือเท่ากับ) ประเมินเป็น true ถ้าค่าคอลัมน์มากกว่าหรือเท่ากับค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งมากกว่าหรือเท่ากับอีกสตริงหนึ่งหรือไม่
< (น้อยกว่า) ประเมินเป็น true ถ้าค่าคอลัมน์น้อยกว่าค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งน้อยกว่าสตริงอื่นหรือไม่
<= (น้อยกว่าหรือเท่ากับ) ประเมินเป็น true ถ้าค่าของคอลัมน์น้อยกว่าหรือเท่ากับค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งน้อยกว่าหรือเท่ากับอีกสตริงหนึ่งหรือไม่
ใน ประเมินเป็น true ถ้าค่าการประเมินใดก็ตามเป็นชนิดข้อมูลเดียวกันและตรงกับค่าคอลัมน์
ไม่ ประเมินเป็น true ถ้าค่าการประเมินใด ๆ ที่ไม่ใช่ชนิดข้อมูลเดียวกันหรือไม่ใช่ค่าคอลัมน์ที่ตรงกัน
และ รวมคําสั่งก่อนหน้าและคําสั่งที่ตามมาโดยใช้การดําเนินการ AND บูลีน คําสั่งทั้งสองต้องเป็นจริงสําหรับเพรดิเคตทั้งหมดให้เป็นจริง
หรือ รวมคําสั่งก่อนหน้าและคําสั่งที่ตามมาโดยใช้การดําเนินการ OR บูลีน หนึ่งในคําสั่งต้องเป็นจริงสําหรับเพรดิเคตทั้งหมดเป็นจริง
จริง นิพจน์บูลีนสําหรับ true
เท็จ นิพจน์บูลีนสําหรับเท็จ
เปล่า ชนิดข้อมูลที่ว่างเปล่า ซึ่งสามารถใช้ได้กับตัวดําเนินการ IS ตัวอย่างเช่น: row IS BLANK
โมฆะ ชนิดข้อมูล null ซึ่งสามารถใช้กับตัวดําเนินการ IS ได้ ตัวอย่างเช่น: row IS NULL

รวมการรักษาความปลอดภัยระดับแถวและระดับคอลัมน์

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

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