จากบทความที่แล้ว ตรวจสอบ Privileges, Authorities and Authorizations ของฐานข้อมูล น่าจะทำให้ผู้ที่อ่าน Blog ของผมได้เข้าใจอะไรหลายๆอย่างเกี่ยวกับสิทธิของ DB2 แต่การเข้ามาจัดการ Database นั้น เราต้องให้สิทธิ(GRANT) ว่าให้ User ที่ต้องการมีสิทธิในการทำอะไรครับ โดยเรื่องของการ GRANT อันนี้กว้างมากครับ โดยผมขอจะขอยกตัวอย่างจริงที่เกิดขึ้น เมื่อนำ DB ของระบบงานเก่ามาขึ้น เพื่อไล่ Code เดิม และมาสร้างระบบใหม่บน .Net ครับ เมื่อทดสอบ Run ระบบได้แจ้ง Message เตือน ดังนี้
อธิบาย Error Message กันก่อน เพราะ Developer ส่วนใหญ่มักมองข้าม โดยเจ้า Error สามารถอธิบายได้ ดังนี้
- User 'AAA' (ขอปิดไว้นิดนึง ฮ่าๆ) ไม่มีสิทธิในการ SELECT ข้อมูลจาก Table SYSTEMINFORMATION ใน Schema INVEST
การแก้ไข
- แบบที่ 1: แก้แบบลูกทุ่ง มันฟ้อง Error อะไร ก็เพิ่มสิทธิตรงนั้น
- ถ้าพัง Table ไหน เราก็ Grant เพิ่ม
db2 GRANT SELECT ON INVEST.SYSTEMINFORMATION TO DSADMIN
- เมื่อได้ Run คำสั่งไปแล้ว เราต้องลองตรวจสอบด้วย Query ดังนี้ (ถ้าลอง Search ข้อมูลก่อนทำจะพบว่าไม่มีข้อมูลครับ)
SELECT * FROM SYSCAT.TABAUTH WHERE GRANTEE = 'DSADMIN' AND TABNAME = 'SYSTEMINFORMATION'
- แบบที่ 2: ถ้าลองได้แกะระบบ หรือถามผู้รู้มาแล้ว พบว่า User นั้นต้องใช้สิทธิระดับที่สูงกว่านั้น
ถ้าลองได้แกะระบบ หรือถามผู้รู้มาแล้ว พบว่า User นั้นต้องใช้สิทธิระดับที่สูงกว่านั้น เราสามารถ Grant สิทธิให้ได้เลย อย่างตัวอย่างนี้ จะลอง Grant สิทธิ User ให้เป็นระดับ DBADM (Database administration authority) ดังนี้
db2 GRANT DBADM ON DATABASE TO USER DSADMIN
- เมื่อได้ Run คำสั่งไปแล้ว เราต้องลองตรวจสอบด้วย Query ดังนี้ (ถ้าลอง Search ข้อมูลก่อนทำจะพบว่าไม่มีข้อมูลครับ)
หมายเหตุ: ชื่อ User DSADMIN เป็นชื่อสมมตินะ เนื่องจากชื่อ Database จริงไม่สามารถเปิดเผยได้ 55
- สรุป
ท้ายที่สุดนี้ สำหรับคนที่สนใจเพิ่มเติมเกี่ยวกับคำสั่ง GRANT สามารถดูเพิ่มเติมได้ ในแต่ละเรื่องตามสารบัญด้านข้างได้ครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.