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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ระบบจะกำหนดการให้สิทธิ์สำหรับทุกระดับของลำดับชั้นโดยใช้ค่า 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 ที่มีให้ในตัวคือ ผู้ดูแลระบบจะสามารถปรับใช้และควบคุมนโยบายการรักษาความปลอดภัยของข้อมูลของตนได้ในที่เดียว นั่นก็คือฐานข้อมูลของตนเอง หากต้องการข้อมูลเพิ่มเติม โปรดดู การรักษาความปลอดภัยระดับแถวในฐานข้อมูล

ขอบคุณสำหรับข้อเสนอแนะของคุณส่งข้อเสนอแนะของคุณเรียบร้อยแล้ว ขอขอบคุณ