หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
บทความนี้แสดงไวยากรณ์สําหรับการกําหนดกฎ ความปลอดภัยระดับแถว (RLS) ในความปลอดภัยของ OneLake หากต้องการใช้กฎ RLS กับตาราง ดูที่ สร้างและจัดการบทบาทความปลอดภัยของ OneLake
กฎ RLS ใช้ไวยากรณ์ SQL เพื่อระบุแถวที่ผู้ใช้สามารถดูได้ ไวยากรณ์จะอยู่ในรูปแบบคําสั่ง SQL SELECT โดยมีกฎ RLS ที่กําหนดไว้ใน WHERE clause กฎ RLS รองรับเฉพาะส่วนย่อยของ SQL ที่กําหนดไว้ในบทความนี้เท่านั้น คําสั่งที่มีไวยากรณ์ RLS ไม่ถูกต้อง หรือไวยากรณ์ RLS ที่ไม่ตรงกับตารางพื้นฐาน จะทําให้ไม่มีแถวแสดงให้ผู้ใช้เห็น หรือเกิดข้อผิดพลาดของการค้นหาในปลายทางวิเคราะห์ SQL
ขณะเขียนนิพจน์ RLS ให้คํานึงถึงแนวทางปฏิบัติที่ดีที่สุดดังต่อไปนี้:
- หลีกเลี่ยงการแสดงออกของ RLS ที่คลุมเครือหรือซับซ้อนเกินไป
- นิพจน์ที่มีชนิดข้อมูลแบบเข้มงวดพร้อมการค้นหาจํานวนเต็มหรือสตริงที่ใช้ "=" จะปลอดภัยและเข้าใจง่ายที่สุด
- ใช้คอลัมน์จํานวนเต็มสําหรับการเรียงลําดับและการดําเนินการที่มากกว่าหรือน้อยกว่า
- หลีกเลี่ยงการเทียบเท่าสตริงถ้าคุณไม่รู้รูปแบบของข้อมูลนําเข้า โดยเฉพาะสําหรับอักขระ Unicode หรือความไวต่อเครื่องหมายวรรณยุกต์
ความปลอดภัยระดับแถวจะประเมินข้อมูลสตริงว่าไม่สนใจตัวพิมพ์เล็ก-ใหญ่ โดยใช้การจัดเรียงและเปรียบเทียบดังนี้: Latin1_General_100_CI_AS_KS_WS_SC_UTF8
ไวยากรณ์
จํานวนอักขระสูงสุดในกฎความปลอดภัยระดับแถวคือ 1000
กฎการรักษาความปลอดภัยระดับแถวทั้งหมดจะอยู่ในรูปแบบต่อไปนี้:
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'
| ตัวกำหนดตำแหน่ง | คำอธิบาย |
|---|---|
| {schema_name} | ชื่อของสคีมาที่มี {table_name} หากรายการรองรับสคีมา คุณต้องรวม {schema_name} |
| {table_name} | ชื่อของตารางที่พรีดิเคต RLS ใช้กับ ค่านี้ต้องตรงกับชื่อตารางอย่างแม่นยํา มิฉะนั้น RLS จะไม่แสดงแถว ใช้วงเล็บ [] เหลี่ยมเพื่อหลีกเลี่ยงชื่อตารางที่มีอักขระพิเศษ ตัวอย่างเช่น: SELECT * FROM [dbo].[Secret.Table] |
| {column_level_boolean} | คําสั่งบูลีนที่ประกอบด้วยคอมโพเนนต์ต่อไปนี้: * ชื่อคอลัมน์: ชื่อคอลัมน์ใน {table_name} ตามที่ปรากฏในสคีมาบันทึก Delta คุณสามารถจัดรูปแบบชื่อคอลัมน์เป็น {column_name} หรือ {table_name} {column_name}. * Operator: หนึ่งใน โอเปอเรเตอร์ที่รองรับ ซึ่งประเมินชื่อคอลัมน์และค่าเป็นค่าบูลีน * ค่า: ค่าคงที่หรือชุดค่าที่ใช้ประเมิน คุณสามารถมีคําสั่งบูลีนอย่างน้อยหนึ่งคําสั่งที่คั่นด้วย AND หรือ OR |
ตัวดำเนินการที่รองรับ
กฎความปลอดภัยระดับแถวรองรับตัวดําเนินการและคีย์เวิร์ดดังต่อไปนี้:
| ตัวดำเนินการ | คำอธิบาย |
|---|---|
= (เท่ากับ) |
ประเมินเป็น true ถ้าค่าทั้งสองเป็นชนิดข้อมูลเดียวกันและการจับคู่ที่ตรงกัน |
<> (ไม่เท่ากับ) |
ประเมินเป็น true ถ้าค่าทั้งสองไม่ใช่ชนิดข้อมูลเดียวกัน และไม่ตรงกันทั้งหมด |
> (มากกว่า) |
ประเมินเป็น true ถ้าค่าคอลัมน์มากกว่าค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งมากกว่าสตริงอื่นหรือไม่ |
>= (มากกว่าหรือเท่ากับ) |
ประเมินเป็น true ถ้าค่าคอลัมน์มากกว่าหรือเท่ากับค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งมากกว่าหรือเท่ากับอีกสตริงหนึ่งหรือไม่ |
< (น้อยกว่า) |
ประเมินเป็น true ถ้าค่าคอลัมน์น้อยกว่าค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งน้อยกว่าสตริงอื่นหรือไม่ |
<= (น้อยกว่าหรือเท่ากับ) |
ประเมินเป็น true ถ้าค่าของคอลัมน์น้อยกว่าหรือเท่ากับค่าการประเมิน สําหรับค่าสตริง ตัวดําเนินการนี้ใช้การเปรียบเทียบระดับบิตเพื่อกําหนดว่าสตริงหนึ่งน้อยกว่าหรือเท่ากับอีกสตริงหนึ่งหรือไม่ |
IN |
ประเมินเป็น true ถ้าค่าการประเมินใดก็ตามเป็นชนิดข้อมูลเดียวกันและตรงกับค่าคอลัมน์ |
NOT |
ประเมินเป็น true ถ้าค่าการประเมินใด ๆ ที่ไม่ใช่ชนิดข้อมูลเดียวกันหรือไม่ใช่ค่าคอลัมน์ที่ตรงกัน |
AND |
รวมคําสั่งก่อนหน้าและคําสั่งถัดไปโดยใช้การดําเนินการ Boolean AND คําสั่งทั้งสองต้องเป็นจริงสําหรับเพรดิเคตทั้งหมดให้เป็นจริง |
OR |
รวมคําสั่งก่อนหน้าและคําสั่งถัดไปโดยใช้การดําเนินการ Boolean OR หนึ่งในคําสั่งต้องเป็นจริงสําหรับเพรดิเคตทั้งหมดเป็นจริง |
TRUE |
นิพจน์บูลีนสําหรับ true |
FALSE |
นิพจน์บูลีนสําหรับเท็จ |
BLANK |
ชนิดข้อมูลว่าง ซึ่งคุณสามารถใช้ร่วมกับตัวดําเนินการ IS ได้ ตัวอย่างเช่น: row IS BLANK |
NULL |
ชนิดข้อมูล null ซึ่งคุณสามารถใช้ร่วมกับโอเปอเรเตอร์ IS ได้ ตัวอย่างเช่น: row IS NULL |