บทความนี้จริงๆ คิดจะเขียนมานานและ แต่ลีมเขียน 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"
และท้ายที่สุดครับ คือ 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.