[DB2] ตรวจสอบ Privileges, Authorities and Authorizations ของฐานข้อมูล

บทความนี้จริงๆ คิดจะเขียนมานานและ แต่ลีมเขียน Draft ไว้ วันนี้พอดีลองเอา DB ของระบบเดิมมาขึ้น เพื่อมา Port ออกมาเป็นระบบใหม่บน .Net แต่ดันติดเรื่องสิทธิ์ใน Database ของระบบเก่า ในเมื่อได้โอกาสอันควรมาแล้ว ก็มาเริ่มอธิบายกันเลยครับ เดี๋ยวลืมไปอีก โดยก่อนที่เรามารู้เรื่องสิทธิ โดยคำว่าสิทธ์เนี่ยเป็นคำกว่าๆครับ เรามารู้จักคำที่เจาะจงไปกว่านี้ ดีกว่าครับ

  • Privileges แปลว่า เอกสิทธิ์ หรือ ถ้าแปลไทยเป็นไทยอีกที คือ  สิทธิพิเศษที่ให้แก่บุคคลใดบุคคลหนึ่งโดยเฉพาะครับ
  • Authorities แปลว่า อำนาจในการสั่งการ
  • Authorizations แปลว่า การให้อำนาจ หรือ การอนุญาต

รู้จักสามคำนี้แล้ว สิ่งที่เราต้องรู้ คือ ความสัมพันธ์ของ 3 คำนี้ครับ โดยเราเข้าไปจัดการ Database ได้นี่ ต้องมี user ที่ได้รับการให้อำนาจ(Authorizations) ให้มีสิทธิการในการจัดการ(Privileges) และมีอำนาจในการจัดการ(Authorities) ครับ

  • เพื่อป้องกันเรามือบอนเข้าถึง Table ได้โดยตรงสำหรับการตรวจสอบเรื่องสิทธิต่างๆ เราสามารถ Query ข้อมูลสรุปได้ โดยต้องดึงจาก Schema SYSCAT เท่านั้น แม้ว่า Schema SYSIBM จะมีข้อมูลเหมือนกันก็ตาม  เพราะ Schema SYSCAT เก็บ View ที่ทำจาก Schema SYSIBM อีกที ซึ่งการที่ IBM ทำแบบนี้
  • เพื่อป้องกันปัญหากรณีที่ IBM มีการเปลี่ยนแปลงโครงสร้างของ Table ใน Schema SYSIBM ตอนเปลี่ยน Vesion หรือ Fix Pack เพราะทาง IBM จะเก็บ View ใน Schema SYSCAT ให้เราใช้งานได้ ทำให้พวก Code snippet, Store หรือ App ที่เราทำเป็น Helper ไว้ ยังสามารถทำงานต่อได้

สำหรับ View (หรือ อาจจะเรียกว่าเป็น Catalog) ที่เกี่ยวกับ Privileges, Authorities and Authorizations มี ดังนี้ครับ

SYSTEM CATALOGคำอธิบาย
SYSCAT.DBAUTHแสดงสิทธิต่างๆใน Database
SYSCAT.TABAUTHแสดงสิทธิต่างๆใน Table และ View
SYSCAT.COLAUTHแสดงสิทธิต่างๆใน Column
SYSCAT.PACKAGEAUTHแสดงสิทธิต่างๆใน Package
SYSCAT.INDEXAUTHแสดงสิทธิต่างๆใน Index
SYSCAT.SCHEMAAUTHแสดงสิทธิต่างๆใน Schema
SYSCAT.PASSTHRUAUTHแสดงสิทธิต่างๆใน Server
SYSCAT.ROUTINEAUTHแสดงสิทธิต่างๆในงานที่เป็น routine ได้แก่ Function, Method และ Store Procedures

สำหรับ Field ในแต่ละ Catalog สามารถดูได้จาก Command ดังนี้

db2 "describe table SYSCAT.DBAUTH"
2015-03-29_093607

และท้ายที่สุดครับ คือ Query สำหรับตรวจสอบสิทธิของแต่ละ User ใน Catalog ครับ

  • Query นี้ตรวจสอบ User อะไรบ้างที่มีสิทธิใน Database โดย Distinct Column GRANTEE(ชื่อ User) จาก Table SYSCAT.DBAUTH
SELECT DISTINCT(GRANTEE) FROM SYSCAT.DBAUTH
  • ผลการ Run Query ดังนี้
  • Query นี้ตรวจสอบว่า User ที่กำหนดมีสิทธิทำอะไรใน Table และ View ไหนบ้าง
SELECT * FROM SYSCAT.TABAUTH WHERE GRANTEE = 'INVEST'
  • ผลการ Run Query ดังนี้

หมายเหตุ: Column TABSCHEMA คือ ชื่อ Schema และ Column TABNAME คือ ชื่อ Table และ View ครับ ส่วน Column อื่นๆที่ลงท้ายด้วย AUTH เป็นสิทธิในการ SELECT, INSERT หรือ ALTER เป็นต้น ครับ


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.