---
schema_version: "1"
id: 80ac3c810363092d3488c5e761ae0110a89bd5a57219e50df441ae931d362e7e
title: แนวทางปฏิบัติที่ดีที่สุดของ RLS สำหรับแหล่งข้อมูลและเวิร์กบุ๊ก
collection: tableau
version: current
locale: th-th
portal_url: https://docs.salesforce.com/tableau/current/th-th/server-linux/rls_bestpractices.md
canonical_url: https://help.tableau.com/current/server-linux/th-th/rls_bestpractices.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 8c56acb2cf81ee05046e3fa024622f358d72cec94b7f67e73f2a04af140aa0ef
description: Understand best practices for row-level security with entitlement tables.
---
[ข้ามไปยังเนื้อหาหลัก](#main-content)

# แนวทางปฏิบัติที่ดีที่สุดของ RLS สำหรับแหล่งข้อมูลและเวิร์กบุ๊ก

ความปลอดภัยระดับแถว (RLS) ใน Tableau จำกัดแถวข้อมูลที่ผู้ใช้แต่ละรายจะเห็นในเวิร์กบุ๊ก ซึ่งแตกต่างจากสิทธิ์ของ Tableau ที่ควบคุมการเข้าถึงเนื้อหาและฟังก์ชันการทำงานของฟีเจอร์ ตัวอย่างเช่น สิทธิ์ใช้ในการควบคุมว่าผู้ใช้สามารถแสดงความคิดเห็นหรือแก้ไขเวิร์กบุ๊กได้หรือไม่ ส่วนความปลอดภัยระดับแถวอนุญาตให้ผู้ใช้สองรายที่ดูแดชบอร์ดเดียวกันเห็นเฉพาะข้อมูลแต่ผู้ใช้แต่ละรายมีสิทธิ์ดูเท่านั้น

การปรับใช้ RLS ใน Tableau สามารถทำได้หลายวิธี ตัวอย่างเช่น คุณสามารถตั้งค่า RLS ในระดับแหล่งข้อมูลหรือเวิร์กบุ๊ก หรือตั้งค่า RLS ในระดับการเชื่อมต่อโดยใช้การเชื่อมต่อแบบเสมือนที่มีนโยบายข้อมูล (ต้องมี Data Management) ดูรายละเอียดทางเลือกต่างๆ ที่[ภาพรวมของตัวเลือกความปลอดภัยระดับแถวใน Tableau](https://help.tableau.com/current/server-linux/th-th/rls_options_overview.htm)

**หมายเหตุ**: หัวข้อนี้มุ่งเน้นเรื่องแนวทางปฏิบัติที่ดีที่สุดของ RLS สำหรับแหล่งข้อมูลและเวิร์กบุ๊ก หากต้องการตัวอย่างโดยละเอียดของแนวคิดที่อธิบายไว้ในหัวข้อนี้ โปรดดู เอกสารประกอบ[แนวทางปฏิบัติที่ดีที่สุดสำหรับความปลอดภัยระดับแถวที่มีตารางการให้สิทธิ์](https://www.tableau.com/th-th/learn/whitepapers/row-level-security-entitlements-tables) หรือ[วิธีการตั้งค่าฐานข้อมูลของคุณเพื่อใช้ความปลอดภัยระดับแถวใน Tableau](https://tableauandbehold.com/2016/03/07/how-to-set-up-your-database-for-row-level-security-in-tableau/) ที่บล็อก _Tableau and Behold_

## เวิร์กโฟลว์ RLS

หากเป็นการเชื่อมต่อแบบสดและการแยกข้อมูลหลายตาราง เวิร์กโฟลว์ RLS พื้นฐานจะเป็นดังนี้

1. ระบบจะระบุผู้ใช้เมื่อเข้าสู่ระบบ Tableau Server หรือ Tableau Cloud
    - กระบวนการนี้ต้องใช้ชื่อผู้ใช้ที่ไม่ซ้ำต่อผู้ใช้แต่ละรายและการลงชื่อเพียงครั้งเดียว (SSO) ที่ปลอดภัย
    - Active Directory, LDAP หรือ Tableau REST API สามารถนำมาใช้ซิงโครไนซ์ชื่อผู้ใช้และกำหนดสิทธิ์ได้
2. ชุดการให้สิทธิ์ข้อมูลของผู้ใช้จะถูกดึงมาจากการให้สิทธิ์ข้อมูลที่เป็นไปได้ทั้งหมด
    - กระบวนการนี้ต้องอาศัยโครงสร้างข้อมูลที่สามารถเชื่อมโยงการให้สิทธิ์กับชื่อผู้ใช้ Tableau ได้
3. ข้อมูลจะถูกกรองด้วยการให้สิทธิ์ของผู้ใช้รายนั้น
    - ซึ่งมักจะต้องใช้ฟังก์ชันผู้ใช้ในฟิลด์ที่คำนวณ
4. ระบบจะใช้ข้อมูลที่กรองและเผยแพร่แล้วมาสร้างเนื้อหา
    - การใช้แหล่งข้อมูลที่เผยแพร่ (แทนที่จะเป็นแหล่งข้อมูลแบบฝัง) ที่มีตัวกรองแหล่งข้อมูลจะช่วยให้แน่ใจว่าไม่สามารถแก้ไข RLS ได้โดยการดาวน์โหลดหรือการแก้ไขเว็บในเวิร์กบุ๊ก

วิธีการตั้งค่าการรวมข้อมูล ฟิลด์ที่คำนวณ และตัวกรองจะขึ้นอยู่กับโครงสร้างข้อมูลและวิธีจัดการผู้ใช้

## ตารางการให้สิทธิ์

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

มุมมองการให้สิทธิ์ซึ่งประกอบไปด้วยการให้สิทธิ์ที่จับคู่กับผู้ใช้หรือบทบาทจะรวมเข้ากับข้อมูล จากนั้นระบบจะใช้ตัวกรองแหล่งข้อมูลตามผู้ใช้ ที่ทำหน้าที่เป็นคำสั่ง WHERE เพื่อดึงเอาเฉพาะการให้สิทธิ์และแถวข้อมูลที่ถูกต้องของผู้ใช้ที่เกี่ยวข้อง (การเพิ่มประสิทธิภาพการค้นหาจะช่วยให้มั่นใจว่ามีการกรองก่อนการรวมข้อมูลเมื่อประมวลผลการค้นหาเพื่อลดการทำซ้ำข้อมูล) หากต้องการข้อมูลเพิ่มเติม โปรดดู [ลำดับการดำเนินงานและการประมวลผลของการทำงาน](#Performa)

### แบบจำลองตารางการให้สิทธิ์

โดยทั่วไป แบบจำลองการนำเสนอการให้สิทธิ์แบ่งออกได้เป็นสองรูปแบบ ดังนี้

**การจับคู่เต็มรูปแบบในระดับความละเอียดสูงสุด**

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

**การให้สิทธิ์บางส่วน**

- ระบบจะกำหนดการให้สิทธิ์สำหรับทุกระดับของลำดับชั้นโดยใช้ค่า NULL เพื่อแสดงสถานะ “ทั้งหมด”
- แบบจำลองจะมีหนึ่งแถวในตารางการจับคู่สำหรับระดับเฉพาะเจาะจงในลำดับชั้นการให้สิทธิ์ ซึ่งจะช่วยลดจำนวนแถวการให้สิทธิ์ของผู้ใช้ในระดับสูงของลำดับชั้นลงได้อย่างมาก
- แบบจำลองนี้ต้องใช้การรวมข้อมูลและตัวกรองที่ซับซ้อนกว่า

### ผู้ใช้และบทบาท

การรวมการให้สิทธิ์มักแสดงเป็น_บทบาท_ซึ่งจะเชื่อมโยงกับผู้ใช้ในตารางการจับคู่แบบกลุ่มต่อกลุ่ม ทำให้สามารถเปลี่ยนหรือลบผู้ใช้จากบทบาทได้ง่าย โดยยังคงรักษาบันทึกทบาทและการให้สิทธิ์ไว้

หรือคุณสามารถสร้างตารางการจับคู่แบบกลุ่มต่อกลุ่มที่กำหนดผู้ใช้ไปยังการให้สิทธิ์โดยตรง แทนที่จะต้องรวมตารางบทบาท ซึ่งต้องจัดการค่าในตารางโดยตรงมากขึ้น แต่จะไม่ต้องทำการรวมข้อมูล

**หมายเหตุ**: ค่าผู้ใช้ที่เกี่ยวข้องกับบทบาทหรือการให้สิทธิ์ต้องตรงกับชื่อผู้ใช้หรือชื่อจริงบนไซต์ Tableau เพื่อใช้ประโยชน์จากฟังก์ชันผู้ใช้ใน Tableau Desktop

### การรวม

ไม่ว่าจะใช้แบบจำลองใดเพื่อนำเสนอการให้สิทธิ์ก็ตาม ขอแนะนำให้รวมการให้สิทธิ์และตารางการจับคู่ทั้งหมดเข้าด้วยกันเป็นมุมมองการให้สิทธิ์แบบดีนอร์มัลไลซ์เดียว แม้ว่าในช่วงแรกการดำเนินการนี้จะทำให้เกิดการให้สิทธิ์เวอร์ชัน “ข้อมูลมหาศาล” (ข้อมูลซ้ำสูง) ตัวกรองแหล่งข้อมูลที่ใช้กับผู้ใช้จะช่วยลดขนาดลงมา คุณยังต้องใช้มุมมองนี้หากคุณวางแผนจะใช้การแยกข้อมูล

วิธีการความละเอียดสูงสุดอาจมีประโยชน์ในด้านประสิทธิภาพเมื่อทุกอย่างแบ่งเป็นลำดับชั้น โดยคุณเพียงต้องรวมรวมข้อมูลครั้งเดียวในระดับต่ำที่สุดของลำดับชั้น ขั้นตอนนี้จะได้ผลต่อเมื่อแอตทริบิวต์ทั้งหมดที่ระดับต่ำสุดไม่ซ้ำกัน หากมีโอกาสที่จะมีข้อมูลซ้ำ (เช่น ภูมิภาคย่อย “กลาง” ในหลายภูมิภาค) คุณจะต้องรวมคอลัมน์ทั้งหมดเพื่อให้ได้ผลลัพธ์ของค่าคีย์ที่ไม่ซ้ำกัน

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

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

### ความละเอียดสูงสุด

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

SELECT \* 
FROM data d INNER JOIN entitlements e ON
d.attribute\_a = e.attribute\_a AND 
d.attribute\_b = e.attribute\_b AND ... 
WHERE e.username = USERNAME()

### การให้สิทธิ์บางส่วน

หากการให้สิทธิ์ของคุณคล้ายคลึงกับแบบจำลองการให้สิทธิ์บางส่วนมากกว่า SQL แบบปรับแต่งเองในการรวมข้อมูลกับการให้สิทธิ์ก็จะซับซ้อนขึ้นเล็กน้อยเนื่องจากมีค่า NULL ตามหลักแล้ว จะมีรูปแบบดังต่อไปนี้ 

SELECT \*
FROM data d 
INNER JOIN entitlements e ON
(e.region\_id = d.region\_id OR ISNULL(e.region\_id) AND
(e.sub\_region\_id = d.sub\_region\_id OR ISNULL(e.sub\_region\_id) AND
(e.country\_id = d.country\_id OR ISNULL(e.country\_id)

หากไม่ใช้ SQL แบบปรับแต่งเอง คุณสามารถทำได้โดยการรวมข้อมูลแบบข้ามและตัวกรองเพิ่มเติมในTableau Desktop สร้างการรวมการคำนวณในทั้งสองฝั่งของการโต้ตอบการรวมที่ประกอบด้วยจำนวนเต็ม 1 และกำหนดให้เท่ากัน ซึ่งจะเป็นการรวมทุกแถวจากตารางข้อมูลกับทุกแถวในตารางการให้สิทธิ์

จากนั้นคุณจะต้องใช้การคำนวณ (หรือการคำนวณแบบแยก) เพื่อหาระดับในลำดับชั้น ตัวอย่างเช่น คุณอาจมีการคำนวณหลายรายการในรูปแบบ `[region_id] = [region_id (Entitlements View)] OR ISNULL([region_id (Entitlements View)]`

หรือคุณอาจมีการคำนวณแบบรวมสำหรับทุกระดับในที่เดียวอยู่ในรูปแบบ

(\[region\_id\] = \[region\_id (Entitlements View)\] OR ISNULL(\[region\_id (Entitlements View)\])
AND
(\[sub\_region\_id\] = \[sub\_region\_id (Entitlements View)\] OR ISNULL(\[sub\_region\_id (Entitlements View)\])
AND
(\[country\_id\] = \[country\_id (Entitlements View)\] OR ISNULL(\[country\_id (Entitlements View)\])

ฟังก์ชัน ISNULL จะจับคู่คอลัมน์การให้สิทธิ์กับรายการทั้งหมดในอีกคอลัมน์ และเมื่อใช้ RLS การคำนวณเหล่านี้ก็จะเพิ่มเป็นตัวกรองแหล่งข้อมูลเช่นเคย

### ตัวกรองแหล่งข้อมูล

สำหรับทั้งสองวิธี เมื่อรวมการให้สิทธิ์กับข้อมูลอย่างถูกต้องแล้ว จะต้องมีการตั้งค่าตัวกรองเพื่อจำกัดข้อมูลสำหรับผู้ใช้แต่ละราย คุณควรสร้างฟิลด์ที่คำนวณที่มีฟังก์ชันผู้ใช้ ตัวอย่างเช่น การเปรียบเทียบบูลีนขั้นพื้นฐานว่าผู้ใช้ที่ระบุอยู่ในฟิลด์ชื่อผู้ใช้เป็นคนเดียวกับชื่อผู้ใช้ของบุคคลที่เข้าสู่ระบบไซต์ Tableau หรือไม่: `[Username] = USERNAME()`

การคำนวณนี้ควรใช้เป็นตัวกรองแหล่งข้อมูล (โดยเลือก TRUE)

หากมีการฝังแหล่งข้อมูลและผู้ใช้มีสิทธิ์แก้ไขเว็บหรือดาวน์โหลดเวิร์กบุ๊ก RLS จะไม่ปรากฏเนื่องจากตัวกรองต่างๆ ทำให้ง่ายต่อการลบ RLS ออก คุณควรเผยแพร่แหล่งข้อมูล Tableau แยกต่างหาก แทนที่จะฝังไว้ในเวิร์กบุ๊ก

### สิทธิ์เข้าถึงทั้งหมดพร้อมความละเอียดสูงสุด

อีกกรณีที่พบบ่อยเมื่อมีสองระดับการเข้าถึงภายในองค์กรคือ บุคคลที่เห็นทุกอย่าง (“สิทธิ์เข้าถึงทั้งหมด”) หรือบุคคลที่ได้รับสิทธิ์ชุดย่อยที่กำหนดตามเหตุอันสมควร กรณีนี้จะพบบ่อยที่สุดในการใช้งานแบบฝัง นั่นคือ องค์กรที่โฮสต์ข้อมูลจะเห็นทุกอย่าง แต่ไคลเอ็นต์แต่ละรายจะเห็นเฉพาะข้อมูลของตัวเองเท่านั้น ในกรณีนี้ คุณต้องมีวิธีส่งกลับข้อมูลทั้งหมดให้ผู้ใช้ที่มี “สิทธิ์เข้าถึงทั้งหมด” โดยยังคงรักษาการรวมข้อมูลความละเอียดสูงสุดของผู้ใช้รายอื่นๆ ทั้งหมดไว้

สำหรับเทคนิคนี้ คุณจะใช้กลุ่ม Tableau เพื่อสร้างการลบล้างด้วยการคำนวณในเงื่อนไขการรวม

1. สร้างกลุ่มให้ผู้ใช้ที่ควรจะเห็นข้อมูลทั้งหมด (เรียกในที่นี้ว่า “สิทธิ์เข้าถึงทั้งหมด”)
2. ในมุมมองข้อเท็จจริง ให้สร้างการรวมทางซ้ายด้วยเงื่อนไขการรวมสองรายการ
    - เงื่อนไขการรวมแรกควรเป็นคอลัมน์ที่นำเสนอระดับความละเอียดสูงสุด
    - เงื่อนไขการรวมที่สองควรเป็นการคำนวณสองรายการต่อไปนี้
        - ทางด้านซ้าย (มุมมองข้อเท็จจริง) ของการคำนวณ ให้ป้อน `True`
        - ทางด้านขวา (มุมมองการให้สิทธิ์) การคำนวณควรเป็นรูปแบบ `IF ISMEMBEROF('All Access') THEN False ELSE True END`
3. สร้างการคำนวณในชีตด้วยโครงสร้าง `[Username] = USERNAME() OR ISMEMBEROF(['All Access'] ([Entitlements View)])`
4. สร้างตัวกรองแหล่งข้อมูลในการคำนวณชื่อผู้ใช้

หากผู้ใช้เป็นสมาชิกของกลุ่ม “สิทธิ์เข้าถึงทั้งหมด” การรวมจะกลายเป็นการรวมทางซ้ายใน `True = False` ซึ่งหมายความว่า ไม่มีการจับคู่เลยในมุมมองการให้สิทธิ์ ดังนั้นมุมมองข้อเท็จจริงทั้งหมดจึงส่งกลับค่า NULL สำหรับคอลัมน์จากมุมมองการให้สิทธิ์ (ไม่มีข้อมูลซ้ำ) ในกรณีที่ผู้ใช้ไม่ได้อยู่ในกลุ่ม “สิทธิ์เข้าถึงทั้งหมด” เงื่อนไขการรวม `True = True` จะไม่ได้ทำการเปลี่ยนแปลงใดๆ และการรวมจะทำงานตามปกติ

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

### ลำดับการดำเนินงานและการประมวลผลของการทำงาน

เมื่อดูการแสดงเป็นภาพใน Tableau Desktop, Tableau Server หรือ Tableau Cloud ทาง Tableau จะส่งการค้นหาที่เพิ่มประสิทธิภาพไปยัง RDBMS ซึ่งจะประมวลผลการค้นหาและส่งผลลัพธ์กลับไปยัง Tableau ให้แสดงเป็นภาพด้วยข้อมูลที่ได้รับ ลำดับการทำงานเมื่อดำเนินการรวม คำนวณ และกรองนั้นจะขึ้นอยู่กับตัวเพิ่มประสิทธิภาพการค้นหาและวิธีดำเนินการค้นหา

#### การเชื่อมต่อแบบสด

เมื่อใช้การเชื่อมต่อแบบสดกับแหล่งข้อมูลใน Tableau ประสิทธิภาพของการดำเนินการค้นหาจะขึ้นอยู่กับตัวเพิ่มประสิทธิภาพการค้นหาที่แปล SQL ขาเข้าเป็นแผนการดึงข้อมูลที่มีประสิทธิภาพ

ระบบสามารถประมวลผลการค้นหาได้สองวิธี ดังนี้

1. กรองแถวการให้สิทธิ์ของผู้ใช้ แล้วรวมกับตารางข้อเท็จจริง
2. รวมการให้สิทธิ์กับตารางข้อเท็จจริง แล้วกรองตามแถวของผู้ใช้

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

หากฐานข้อมูลประมวลผลการค้นหาด้วย_การรวมแล้วกรอง_ ก็อาจมีข้อมูลซ้ำได้ จำนวนแถวสูงสุดที่ประมวลผลจะเป็นจำนวนผู้ใช่ที่มีสิทธิ์ดูแถวดังกล่าวนั้นคูณกับแต่ละแถวในตารางข้อมูล

เห็นได้ชัดว่าหากเกิดกรณีแบบที่สองนี้ขึ้น การค้นหาของคุณจะใช้เวลานานกว่าจะเสร็จสิ้น คุณจะได้รับข้อผิดพลาด หรือมีข้อบ่งชี้ว่าเกิดปัญหาด้านประสิทธิภาพในฐานข้อมูล ปริมาณข้อมูลทั้งหมดของคุณจะเพิ่มขึ้นอย่างรวดเร็ว ซึ่งอาจทำให้ระบบทำงานหนักกว่าปกติอย่างมากใน Backend

#### การแยกข้อมูล

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

ปัญหาลำดับการทำงานเดียวกันนี้ยังเกิดขึ้นเมื่อสร้างการแยกข้อมูลตารางเดียว อย่างไรก็ตาม จะเกิด “ข้อมูลมหาศาล” ทั้งในแหล่งข้อมูลเบื้องหลังและภายในผลลัพธ์การแยกข้อมูลเอง

## ข้อพิจารณาสำหรับการแยกข้อมูล

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

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

- _ออบเจ็กต์ข้อมูล_เป็นการค้นหาตาราง มุมมอง หรือ SQL แบบปรับแต่งเองที่แสดงการรวมข้อเท็จจริงและตารางมิติข้อมูลที่จำเป็นแบบดีนอร์มัลไลซ์
- _ออบเจ็กต์การให้สิทธิ์_เป็นการค้นหาตารางแบบดีนอร์มัลไลซ์ มุมมอง หรือ SQL แบบปรับแต่งของการให้สิทธิ์ใดๆ ที่จำเป็นในการกรองข้อมูลที่ระดับละเอียดสูงสุด ซึ่งต้องใช้
    - คอลัมน์ชื่อผู้ใช้ที่ตรงกันทั้งหมดกับชื่อผู้ใช้ใน Tableau Server หรือ Tableau Cloud
    - แถวสำหรับการให้สิทธิ์ที่ละเอียดที่สุดแต่ละรายการไปยังออบเจ็กต์ข้อมูล

รูปแบบนี้มีอธิบายไว้ในวิธีการความละเอียดสูงสุดข้างต้น การแยกข้อมูลหลายตารางใช้วิธีการเดียวกันนี้ โดยมีเงื่อนไขว่าจะรวมสองออบเจ็กต์ข้อมูลเข้าด้วยกันเท่านั้น และการกรองเฉพาะฟิลด์ใดๆ ถูกนำไปใช้ภายในโครงการอยู่แล้ว

เนื่องจากการแยกข้อมูลหลายตารางปิดใช้งานตัวกรองการแยกข้อมูลอยู่ คุณสามารถกรองได้ในมุมมองหรือตารางที่คุณเชื่อมต่อในแหล่งข้อมูล หรือกำหนดตัวกรองในออบเจ็กต์ SQL แบบปรับแต่งเองในกล่องโต้ตอบการเชื่อมต่อข้อมูล Tableau

**หมายเหตุ**: เมื่อใช้การเชื่อมต่อแบบสด หากมีการฝังแหล่งข้อมูลและผู้ใช้มีสิทธิ์แก้ไขเว็บหรือดาวน์โหลดเวิร์กบุ๊ก RLS จะไม่ปรากฏเนื่องจากตัวกรองต่างๆ ทำให้ง่ายต่อการลบ RLS ออก คุณควรเผยแพร่การแยกข้อมูลแบบแยกต่างหาก แทนที่จะฝังไว้ในเวิร์กบุ๊ก

### การแยกข้อมูลตารางเดียว

ขอแนะนำให้ใช้วิธีการต่อไปนี้เฉพาะในกรณีที่ใช้ Tableau เวอร์ชันก่อน 2018.3 และควรใช้การแยกข้อมูลหลายตารางหากสามารถใช้ได้

การแยกข้อมูลตารางเดียวสร้างการรวมที่เป็นจริงใดๆ จากที่คุณสร้างขึ้นตอนสร้างแหล่งข้อมูล Tableau และจัดเก็บทุกอย่างเป็นตารางเดียวผ่านการค้นหาเดียว ผลลัพธ์ที่ได้จะแปลงเป็นตารางเดียวในไฟล์การแยกข้อมูล การดีนอร์มัลไลซ์นี้มีความเสี่ยงที่จะทำให้เกิดข้อมูลซ้ำจำนวนมหาศาล เนื่องจากทุกแถวที่จัดสรรไปยังการให้สิทธิ์มากกว่าหนึ่งรายการหรือผู้ใช้มากกว่าหนึ่งรายจะสร้างข้อมูลซ้ำ เนื่องมาจากความสัมพันธ์แบบกลุ่มต่อกลุ่ม

หากต้องการป้องกันไม่ให้เกิดข้อมูลซ้ำ ให้ทำดังนี้

1. สร้างฟิลด์ผู้ใช้การรักษาความปลอดภัยที่ประกอบด้วยชื่อผู้ใช้ของการให้สิทธิ์ดังกล่าว
    - ตัวอย่างเช่น ค่าอาจเป็น “bhowell|mosterheld|rdugger”
2. ใช้ฟังก์ชัน CONTAINS() ภายใน Tableau เพื่อระบุผู้ใช้แต่ละรายให้ถูกต้อง
    - ตัวอย่างเช่น `CONTAINS([Security Users Field], USERNAME())`

วิธีการนี้ย่อมมีเงื่อนไขบางประการ โดยคุณจะต้องเริ่มต้นจากการให้สิทธิ์ในแถวต่างๆ ไปยังคอลัมน์เดียวที่แยกกันอย่างถูกต้องโดยใช้ SQL และคอลัมน์นั้นอาจมีอักขระจำนวนมากมาย การจับคู่บางส่วนอาจเป็นปัญหาได้ และคุณต้องใช้เครื่องมือแยกที่จะไม่มีทางใช้งานได้ใน ID นั้น แม้ว่าจะใช้งานได้ในเครื่องมือสำหรับข้อมูลของ Tableau เป็นการคำนวณสตริง แต่จะทำงานช้ามากในฐานข้อมูลส่วนใหญ่ จึงทำให้คุณไม่สามารถสลับกลับไปยังการเชื่อมต่อแบบสดได้

คุณสามารถเลือกใช้การแยกข้อมูลอื่นๆ ตาม “บทบาท” หรือระดับการให้สิทธิ์ เพื่อให้มีเฉพาะข้อมูลที่เหมาะสมกับบุคคลหรือระดับนั้นอยู่ในการแยกข้อมูล แต่จะต้องใช้กระบวนการที่ให้สิทธิ์และใช้งานการเผยแพร่เทมเพลตภายใน Tableau Server อย่างเหมาะสม ซึ่งมักจะดำเนินการผ่าน API

## ใช้ความปลอดภัยระดับแถวในตัวในฐานข้อมูล

ฐานข้อมูลหลายแห่งมีกลไกสำหรับ RLS ในตัว หากองค์กรของคุณได้ดำเนินการสร้างความปลอดภัยระดับแถวในฐานข้อมูลแล้ว คุณอาจสามารถใช้ประโยชน์จาก RLS ที่มีอยู่แล้วได้ การใช้โมเดล RLS ในตัวอาจไม่ได้ง่ายกว่าหรือดีกว่าเสมอไปเมื่อเทียบกับการสร้างขึ้นใหม่โดยคำนึงถึง Tableau แต่เทคนิคเหล่านี้มักถูกนำมาใช้เมื่อองค์กรได้ลงทุนไปกับเทคโนโลยีเหล่านี้แล้ว และอยากจะใช้ประโยชน์จากสิ่งที่ได้ลงทุนไป ประโยชน์สำคัญของการใช้ RLS ที่มีให้ในตัวคือ ผู้ดูแลระบบจะสามารถปรับใช้และควบคุมนโยบายการรักษาความปลอดภัยของข้อมูลของตนได้ในที่เดียว นั่นก็คือฐานข้อมูลของตนเอง หากต้องการข้อมูลเพิ่มเติม โปรดดู [การรักษาความปลอดภัยระดับแถวในฐานข้อมูล](https://help.tableau.com/current/server-linux/th-th/rls_datasource.htm)