Site icon PlusMagi's Blog By Pitt Phunsanit

Oracle: ข้าม schema ของ user

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


การให้สิทธิ์เข้าถึง ( Granting Privileges )

สมมติว่าเรามี 2 Users คือ User_A ( เจ้าของข้อมูล ) และ User_B ( ผู้ขอใช้งาน ) หาก User_B ต้องการอ่านข้อมูลจาก Table ที่ชื่อ EMPLOYEES ของ User_A จะต้องดำเนินการดังนี้

การให้สิทธิ์รายคำสั่ง

ให้ User_A ( หรือ Admin ) รันคำสั่ง SQL


วิธีการเรียกใช้งาน ( Referencing Objects )

เมื่อได้รับสิทธิ์แล้ว User_B สามารถเข้าถึงข้อมูลได้ 2 วิธีหลัก

  1. การเรียกแบบระบุชื่อ Schema ( Fully Qualified Name )
    User_B ต้องระบุชื่อเจ้าของ Table นำหน้าเสมอ
    SELECT * FROM User_A.EMPLOYEES;
  2. การใช้ Synonym ( เพื่อความสะดวก )
    หากไม่อยากพิมพ์ชื่อ User_A นำหน้าทุกครั้ง User_B สามารถสร้าง Synonym ( ชื่อนามแฝง ) ไว้ใน Schema ของตัวเองได้
    — สร้าง Synonym ส่วนตัวใน User_B
    CREATE SYNONYM EMPLOYEES FOR User_A.EMPLOYEES;
    — คราวนี้เรียกใช้ได้โดยตรง
    SELECT * FROM EMPLOYEES;
  3. การจัดการสิทธิ์ผ่าน Role ( แนะนำสำหรับระบบใหญ่ )
    หากมี User จำนวนมากที่ต้องเข้าถึงข้อมูลชุดเดียวกัน การไล่ GRANT ทีละคนจะจัดการยาก แนะนำให้ใช้ Role แทน
    • สร้าง Role:
      CREATE ROLE READ_ONLY_A;
    • ให้สิทธิ์ Role:
      GRANT SELECT ON User_A.EMPLOYEES TO READ_ONLY_A;
    • มอบ Role ให้ Users:
      GRANT READ_ONLY_A TO User_B, User_C, User_D;

ข้อควรระวังและเทคนิคเพิ่มเติม

คำแนะนำ: การให้สิทธิ์ SELECT ANY TABLE หรือ DBA Role แก่ User ทั่วไปเป็นสิ่งที่ไม่ควรทำอย่างยิ่ง เพราะจะทำให้ User นั้นเข้าถึงข้อมูลได้ทั้ง Database ซึ่งผิดหลักการ Least Privilege ( การให้สิทธิ์เท่าที่จำเป็น ) ครับ


อ่านเพิ่มเติม

Exit mobile version