Oracle Troubleshoot : ORA-01031: insufficient privileges when create Foreign key

Oracle Troubleshoot : ORA-01031: insufficient privileges when create Foreign key

วันนี้มีปัญหาเล็กๆแต่อาจเป็นปัญหาเส้นผมบังภูเขามานำเสนอครับ สำหรับคนใช้งานฐานข้อมูล Oracle RDBMS คงจะคุ้นเคยกับ oracle error code “1031” หรือ ORA-01031: insufficient privileges เป็นปัญหาที่เกิดจากการไม่มีสิทธิ์ในการกระทำใดๆที่คุณกำลังทำอยู่นั่นเอง ซึ่ง error code นี้สามารถเกิดขึ้นได้กับการเรียกใช้คำสั่งหรือ statement ใดๆภายในฐานข้อมูล

Case Study 1 :?Insufficient Privileges when create foreign key

User A มีตารางชื่อ “CUSTOMER_INFO” และมีฟิลด์ที่ต้องไปอ้างอิงจากตาราง lookup สมมติว่าฟิลด์ชื่อ “PROV_ID” (ฟิลด์เก็บรหัสจังหวัด) User B มีตารางชื่อ “MLK_PROVINCE” (Master Lookup Province) มีฟิลด์ชื่อ PROVINCE_ID เป็น Primary key โจทย์ตอนนั้นคือ ต้องการสร้าง “Foreign key” บนตาราง A.CUSTOMOER_INFO(PROV_ID) ให้ไปอ้างอิงกับ primary key ที่ B.MLK_PROVINCE(PROVINCE_ID) โดย user A เรียกใช้คำสั่ง

 

ALTER TABLE CUSTOMER_INFO ADD ( CONSTRAINT ?FK_PROV_ID” FOREIGN KEY(“PROV_ID”) REFERENCES B.MLK_PROVINCE (“PROVINCE_ID”));

 

ปรากฎว่าขึ้นข้อความ error “ORA-01031: insufficient privileges” ในตอนนั้นก็งงๆว่า ทำไมละก็ grant select on B.mlk_provine to A ; แล้วนี่นา ก็เลยลองใหม่โดยใช้ user “SYSTEM” สร้างดู เพราะว่าจะมีสิทธิ “any” อยู่ แต่ปรากฎว่าก็ยังขึ้น error เหมือนเดิม คราวนี้เลยต้องถามผู้รู้ google กัน ก็ได้คำตอบว่า ในการสร้าง Foreign key นอกจากมีสิทธิ Select แล้ว ต้องมีสิทธิ REFERENCES ด้วย ด้วยเหตุนี้ทางแก้สำหรับ Case study นี้คือ

 

SQL> grant SELECT,REFERENCES on B.MLK_PROVINCE to A ;

 

เหมือนเส้นผมบังภูเขาเลยนะครับ แล้วพบกันตอนต่อไป

You may also like...

Leave a Reply

Your email address will not be published.