[DB2] Grant สิทธิ์ในการใช้งานฐานข้อมูล

จากบทความที่แล้ว ตรวจสอบ 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 อะไร ก็เพิ่มสิทธิตรงนั้น [sql]db2 GRANT SELECT ON INVEST.SYSTEMINFORMATION TO DSADMIN[/sql] เมื่อได้ Run คำสั่งไปแล้ว เราต้องลองตรวจสอบด้วย Query ดังนี้ (ถ้าลอง Search ข้อมูลก่อนทำจะพบว่าไม่มีข้อมูลครับ) [sql]SELECT * FROM SYSCAT.TABAUTH WHERE GRANTEE = ‘DSADMIN’ AND TABNAME = ‘SYSTEMINFORMATION'[/sql] แบบที่ 2: ถ้าลองได้แกะระบบ หรือถามผู้รู้มาแล้ว พบว่า…

[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 หรือ…

[DB2] Export Table Data

ช่วงนี้ UAT มีอะไรแปลกให้เขียนเยอะครับ อย่างตอนนี้เป็นการใช้ DB2 Export เพื่อ Export ค่า mapping ของระบบ Interface จาก DB ของทีม QA ไปยังที่ Site ลูกค้าครับ เพราะลูกค้าบอกว่า Script ที่ได้ Run ไปที่เครื่อง AIX มันไม่ครับ (มีไม่ครบ ก็ยัดจากเครื่อง QA มาเลย 555) มาดูคำสั่ง Export ดีกว่าครับ รูปแบบคำสั่งคร่าวๆ เพราะจริงๆมี Option ให้เลือกยิบย่อยมากมายครับ export to [path และชือไฟล์ที่ต้องการ] of [ชนิดของ File ที่ Export] messages [path และชือไฟล์ log ที่ต้องการ] [คำสั่งSQL ในการดึงมูลมา Export] ชนิดของ File ที่ Export ดังนี้ DEL: delimited ASCII format WSF: work sheet format IXF: Integration Exchange Format, PC version. Binary format มีการเก็บโครงสร้างมาให้ด้วย แต่มีประโยชน์ตอนที่ SELECT * เท่านั้น ตัวอย่างคำสั่ง กรณีแบบ .ixf (ขอเน้นการใช้แบบ .ixf เพราะ ใช้ Import ข้าม Version หรือ Platform ได้ โดยไม่มีปัญหาครับ) [sql]db2 export to C:\I_MAPFIELDVALUE.ixf of ixf…

[DB2] LOCK & UNLOCK Table

บางครั้งเวลาที่เราพัฒนาระบบ เรามีความจำเป็นที่ Lock Table เพื่อบังคับให้มีการ Insert/Update Record ได้ทีละรายการเท่านั้น เพื่อจุดประสงค์บางอย่าง เช่น การ Approve ยืนยันรายการ เป็นต้น โดยรูปแบบของคำสั่ง LOCK มีรูปแบบ ดังนี้ Mode การ Lock มี 2 แบบ ได้แก่ IN SHARE MODE คือ Lock ทุกอย่าง แต่ยังสามารถ Read ข้อมูลใน Table ได้ ดังตัวอย่าง [sql]LOCK TABLE INVEST.COMPANY IN SHARE MODE[/sql] IN EXCLUSIVE MODE คือ Lock ทุกอย่างเลย ดังตัวอย่าง [sql]LOCK TABLE INVEST.COMPANY IN EXCLUSIVE MODE[/sql] สิ่งที่ควรระวัง ถ้าอีก Process นึงที่มีการยุ่งเกี่ยวกับ Table เดียวกัน  และกำหนด Isolation level เป็น Uncommitted Read (UR) แล้ว Process นั้นสามารถอ่านข้อมูลได้ แม้ว่าจะ Lock ในระดับ Exclusive แล้วก็ตาม การระบุชื่อ Table ที่จะ LOCK ควรระบุชื่อ Schema เข้าไปด้วย เพราะเมื่อ Upgrade DB Server หรือ Client จะได้ไม่มีปัญหาที่เกิดจาก Defect ของทาง IBM เอง เพราะเท่าที่พบเคยเจอปัญหาใน 10.5 ครับ เมื่อ Lock…

[DB2] SQL สำหรับตรวจสอบ Version ของ DB2

ช่วงนี้ไป UAT บ่อย เริ่มเจอปัญหาแปลกของ Enviroment ของ Production กับ Enviroment ที่ใช้ในการ Development ที่บริษัท แตกต่างกัน ทำให้เวลาที่เราฝั่งคำสั่งบางตัว อาจจะเกิดปัญหาขึ้นได้ครับ โดยวันนี้ผมขอแปะ Query สำหรับดู Version และ Fix Pack ของ DB Server ดังนี้ครับ [sql] SELECT SERVICE_LEVEL , FIXPACK_NUM FROM TABLE (SYSPROC.ENV_GET_INST_INFO()) AS INSTANCEINFO [/sql] โดยผลลัพธ์ที่ได้ จาก Query มี ดังนี้ครับ

AT Service Protocol Error Code 8 (Interactive Process)

Microsoft Windows

บางครั้งเราอาจจะมีระบบงานเก่าที่ใช้ “AT Service Protocol” พอย้ายมาระบบใหม้เวลาทำงานเจอ Error Message แนวนี้ Error Code 8 (Interactive Process) ครับ สาเหตุ เกิดจาก Windows 8 และ Windows Server 2012. ได้ยกเลิกการใช้งาน AT Service Protocol แล้ว และอาจจะตัด Feature นี้ออกไปใน Windows รุ่นถัดๆไปในอนาคตครับ การแก้ไข ใช้ได้สำหรับ Windows 8 และ Windows Server 2012. เท่านั้น โดยการเพื่ม Config ใน Registry ดังนี้ สุดท้ายนี้ ถ้าใครจะทำระบบงานใหม่ๆที่ต้องมี Schedule แนะนำให้ใช้ตัวนี้ครับ Task Scheduler Managed Wrapper ซึ่งเป็น Third Party ที่ช่วยจัดการเรื่องนี้ครับ ใช้งานได้ง่าย สำหรับผมใช้ทำ App ในการดึงข้อมูลจาก ThaiBMA เพื่อแปลง Format และให้ระบบอื่น Feed ข้อมูลเข้าระบบครับ แต่ถ้าอยากลองไปไล่ Library ของ Microsoft จริงๆ ตามมาดูได้ที่นี่ครับ Task Scheduler นี้ครับ Reference (v=vs.85).aspx NuGet Gallery | TaskScheduler dahall/TaskScheduler: Provides a .NET wrapper for the Windows Task Scheduler. It aggregates the multiple versions, provides an editor…

[DB2] -tvf , -td@ -f คือ อะไร

IBM DB2

จริงๆ บทความนี้ผมดองมานานมาก เพราะเดือนที่แล้ว เดือนกุมภาพันธ์ เดือนแห่งการกุมขมับ เพราะ Project ล่าสุดของออมสินต้องส่ง Software ในส่วนของ Phase1 ภายในเดือนนั้นครับ หลังจากผ่านเข้าสู่ Season 2 เฮ้ยย Phase 2 พอมีเวลาได้หายใจบ้าง เลยจะมาเก็บบทความที่ดองไว้ครับ โดยวันนี้ผมขออธิบายคำสั่งเกี่ยวกับ DB2 คำสั่ง -tvf , -td@ ก่อนครับ เพราะหลายๆคนคงใช้คำสั่งเหล่านี้ โดยหลักการ CPD (Copy and Paster Development  ครับ ฮ่าๆ)  แต่ไม่รู้ว่ามัน คือ อะไร และคำสั่งที่ลองไป มันมีอะไรที่พิเศษ หรือป่าวนะ เจ้าคำสั่ง -tvf , -td@ เป็นคำสั่งที่ใช้ใน DB2 CLP (Command Line Processor) มองง่ายๆว่าเป็น DOS ของ DB2 โดยเอาไว้รันคำสั่งเฉพาะ หรือเป็น SQL ก็ได้นะครับ เพื่อจัดการกับฐานข้อมูล โดยคำสั่งขึ้นต้นด้วย db2 ตามด้วยคำสั่งที่ต้องการ โดยมีรูปแบบ ดังนี้ ตัวอย่างคำสั่งง่ายๆ หลังจากเกริ่นพื้นฐานไปแล้ว มาถึงคิวของคำสั่ง -tvf บ้างนะครับ โดยคำสั่ง -tvf อยู่ในส่วนของ option-flag ครับ Concept ของ option-flag คือ การผสมตัวอักษร ซึ่งแต่ละตัวอักษรมีคุณสมบัติเฉพาะตัวครับ สามารถดูได้จาก Help นะครับ ซึ่งผมได้ Capture มาบางส่วนแล้ว โดยอ้างอิงจาก Version 10.5 นะครับ จาก Option-Flag -tvf สามารถแปลความหมายได้ ดังนี้ครับ สำหรับ -tvf การใช้งานจริงคำสั่งนี้ใช้ เพื่อรัน Script SQL และแสดงผลลัพธ์การ…

เปลี่ยนเช็คเงินคืนภาษี เป็นเงินสด

สำหรับมนุษย์เงินเดือนอย่างเราๆ เมื่อได้เงินเดือนมาสิ่งที่ต้องหักไปมีประกันสังคม สวัสดิการต่างๆ และก็ภาษี โดยันอื่นๆช่างมันไปก่อน เรามาวกกลับมาที่ภาษีดีกว่า สำหรับขั้นตอนการเสียภาษีคำนวณอะไรต่างๆบราๆ ในเว็บอื่นมีหมดและ หรือจะลองคำนวณเล่นๆที่เว็บ WealthMagik-Tax Saving Plan ก็ได้ครับ อันนี้ผมใช้ประจำคำนวณยอด ก่อนจะยื่นภาษีครับ พอยืนภาษีไปแล้ว ถ้าเราเสียเงินเกิน ก็ต้องมานั่งดูที่เว็บนี้ว่าเงินจะมาเมื่อไหร่ 555 หลังจากรอมานานนนนแสนนาน ผมก็ได้เช็คเงินคืนภาษีมานะ เมื่อเราได้เช็คมาการ เราขึนเงินได้ที่ไหนบ้าง แบบเร็วไปที่ธนาคารกรุงไทย(KTB) ได้เงินเลย เข้าบัญชีออมทรัพย์ของธนาคารกรุงไทย ให้เขียนใบสีเขียว ถ้าเปลี่ยนเป็นเงินสด ให้เขียนใบสีแดงครับ แบบชิวๆ ไปที่ธนาคารอื่นครับ แต่มีข้อแม้ต้องยื่นเช็คก่อนบ่าย 2 นะครับ ไม่งั้นเช็คที่เรายื่นไปมีผลในวันทำการถัดไปแทนครับ จากนั้นก็รอสัก 2-3 วันเงินเข้ามาบัญชีมาครับ 😀 จริงถ้าสงสัยอะไร เราสามารถถามพนักงานของแต่ะธนาคารได้ครับ พนักงานน่ารักทุกคน 😀