ความถูกต้อง หรือ Integrity (ตำราบางเล่มเรียกว่า ความคงสภาพ หรือความบูรณภาพหมายถึง ความแม่นยำ หรือความไม่ผิดเพี้ยนของข้อมูลในฐานข้อมูล Integrity refers to the accuracy or correctness of data in database integrity.) โดยมีความถูกต้องอยู่ 2 ประการคือ
1. ความถูกต้องเฉพาะข้อมูล (Database Specific Integrity) หมายถึง ข้อกำหนดหรือกฎ (Constraints or Rules) ของฐานข้อมูลนั้น เช่น อายุของนักศึกษาที่เข้าเรียนมนฐานข้อมูลของสถาบันแห่งหนึ่งจะต้องไม่เกิน 40 ปี หรือ จำนวนชั่วโมงทำงานของพนักงานในบริษัทแห่งหนึ่งจะต้องไม่เกิน 40 ชั่วโมงต่อสัปดาห์ เป็นต้น
2. ความถูกต้องทั่วไปของฐานข้อมูล (General Integrity) หมายถึง ข้อกำหนด หรือกฎ ที่ใช้บังคับกับฐานข้อมูลทุกฐานข้อมูลเสมอกันหมด ซึ่งมักจะเกี่ยวข้องกับคีย์หลักและคีย์นอก
9.2.2 ประเภทของความถูกต้องของข้อมูล (4 Categories of State Constraints)
เราแบ่งข้อกำหนดเรื่องความถูกต้องของข้อมูลโดยทั่วไป (ข้อกำหนดสภาวะคงที่) ออกเป็น 4 ประเภท คือ
มีกฎอยู่ว่า “การปรับปรุงที่มีอยู่แล้วนั้น ต้องไม่ทำให้ตารางนั้นผิดไปจากเงื่อนไขเดิมที่เป็นอยู่ตอนเริ่มสร้างตารางนั้นขึ้นมา” (No update operation must ever be allowed to leave any relvar in a state that violates its own predicate.) เช่น สินค้าสีแดงชิ้นสดท้ายที่มีอยู่จะถูกแก้ไขโดยการลบออก หรือเปลี่ยนเป็นสีอื่นไม่ได้ เพระกฎเดิมต้องมีสินค้าอย่างน้อย 1 ชิ้นตรงเป็นสีแดง เป็นต้น
ข้อกำหนดสภาวะคงที่ (State Constraints) คือ ข้อกำหนดที่กล่าวมาแล้วในข้อ 9.2.2 ส่วนข้อกำหนดสภาวะที่ไม่คงที่ (Transition Constraints) คือ ข้อกำหนดที่เกี่ยวกับการเปลี่ยนแปลงสภาวะที่ถูกต้องอย่างหนึ่งไปสู่สภาวะที่ไม่ถูกต้องอย่างหนึ่ง (constraints on legal transitions from one correct state to another)
ลักษณะการเปลี่ยนสภาวะที่ถูกต้อง เช่น
ตัวอย่างข้อกำหนดเกี่ยวกับ STATUS เช่น ถ้ามีกฎว่า “ค่าสถานะของผู้จัดส่งต้องไม่ลดลง” เราสามารถเขียนคำสั่งข้อกำหนดได้ ดังนี้
CONSTRAINT TRC1 IS_EMPTY
(((S’ {SNO, STATUS } RENAME STATUS AS STATUS’)
JOIN S{SNO,STATUS})
WHERE STATUS’ > STATUS);
กล่าวคือ ข้อมูลในตาราง S’ ต้องไม่มีค่า STATUS มากกว่าข้อมูลในตาราง S ข้อสังเกตคือ S’ หมายถึง ตารางดั้งเดิมของ S ก่อนที่จะมีการปรับปรุงข้อมูล(S’, a primef relvar name, is understood to refer to the corresponding reval as it was prior to the update under consideration.)
9.2.5 ข้อกำหนดเกี่ยวกับคีย์ (Keys)
1. คีย์คู่แข่ง (Candidate Keys) มีคำจำกัดความดังนี้ ให้ K เป็นเซตของแอตทริบิวต์ของตาราง R แล้ว K จะเป็นคีย์คู่แข่งของตาราง R มีคุณสมบัติดังตารางต่อไปนี้
- ค่าไม่ซ้ำ (Uniqueness) ค่าในตาราง R ต้องไม่มีค่าใดในแอตทริบิวต์ K ที่มีค่าซ้ำกัน
- ต้องไม่สามารถลดรูปได้อีก (Irreducibility) กล่าวคือ ต้องไม่มีสับเซตของ K ที่มีลักษณะเป็น Uniqueness อีก เช่น ถ้ามีตาราง R(r1, r2, r3,….) โดยที่มีคีย์หลัก คือ r1 + r2 + r3 ซึ่งค่าของทั้ง 3 รวมกันต้องไม่มีค่าซ้ำ ขณะเดียวกันต้องไม่มีการนำเอาค่าของ r1 + r2 (ซึ่งเป็นสับเซตของ r1 + r2 + r3 ) มารวมกันแล้วได้ค่าที่มีซ้ำได้อีก โดยมีเงื่อนไขว่า K ใด ๆ ต้องไม่มีค่าว่าง(NULL)
สรุป
- การเลือกคีย์หลัก ต้องเลือกจากคีย์คู่แข่ง
- คีย์คู้แข่ง ต้องไม่มีค่าว่าง (NULL)
- คีย์นอก (Foreign Key) มีคำจำกัดความว่า คีย์นอกเป็นสับเซตของโครงสร้างตาราง R2 ซึ่ง ค่าตารางดังกล่าวต้องเข้าคู่ คือ ตรงกันกับค่าของคีย์คู่แข่งตัวหนึ่งในตาราง R1
ให้ R2 เป็นโครงสร้างตาราง คีย์นอกในตาราว R2 จะเป็นเซตของแอตทริบิวต์ของ R2 ซึ่งก็คือคีย์นอก ซึ่ง.....
*มีโครงสร้างตาราง R1 ซึ่งมีคีย์คู่แข่งในตาราง นั้น
*ค่าของคีย์นอกในตาราง R2 ตรงกับค่าของคีย์คู่แข่งในตาราง R1 ตลอดเวลา
- การกระทำที่เกี่ยวข้องกันกับการอ้าวอิงผ่านคีย์นอก (Referential Actions) เช่น การลบทูเพิลในตารางหนึ่งซึ่งเป็นคีย์นอกในตารางหนึ่ง อย่าง.....DELETE S WHERE SNO = SNO(S1’);]
ซึ่งมีการอ้างถึง SNO อยู่ในตาราง SP(SNO,PNO,QTY) ก็จะเกิดปัญหาตามมา ดังนั้น ระบบจัดการฐานข้อมูลจึงมีวิธีแก้ไขซึ่งเรียกว่าเป็น การกระทำเพื่อชดเชย (Compensating Action) ซึ่งเป็นการประกันว่าจะเกิดผลตามข้อกำหนดเกี่ยวกับความถูกต้องของข้อมูล กล่าวคือ ถ้ามีการลบทูเพิลในตาราง S ซึ่งมี SNO เป็น ’S1’ แล้วจะต้องให้ระบบทำการลบทูเพิลที่มีค่าในคีย์นอกที่ตรงกันในตาราง SP ด้วยโดยอัตโนมัติ โดยสามารถระบุข้อกำหนดดังกล่าวไว้ตอนที่เริ่มต้นสร้างคีย์นอก เช่น
VAR SP BASWE RELATION {…….}……
FOREIGN KEY {SNO} REFERENCES S
ON DELETE CASCADE;
การปรับปรุงข้อมูลที่มีการอ้างอิงของคีย์นอก โดยปรกติระบบฯ จะมีวิธีการชดเชยให้ 3 วิธีได้แก่
- CASCADE คือ การปรับปรุงข้อมูลที่ค่าคีย์นอกตรงกันในตารางอื่นต่อเนื่องไปเป็นทอด ๆ โดยอัตโนมัติ
2. RESTRICT คือ ไม่ยอมให้มีการปรับปรุงข้อมูลที่ค่าคีย์นอกตรงกับในตารางอื่น แต่จะยอมให้ปรับปรุงข้อมูลเฉพาะที่ไม่มีค่าคีย์นอกในตารางอื่นเท่านั้น
3. NO ACTIONT คือ ยินยอมให้มีการปรับปรุรงข้อมูลตามคำขอโดยระบบฯไม่ทำอะไรเพิ่มเติมใด ๆ เลย
9.3 การฟื้นสภาพ
- การฟื้นสภาพ (Recovery) หมายถึง การซ่อมแซมฐานข้อมูลให้กลับไปสู่สภาวะที่ถูกต้องหรือไม่มีความขัดแย้งกันหลังจากเกิดความขัดข้อง ซึ่งทำให้เกิดความขัดแย้งของข้อมูลหรือสงสัยว่าจะเป็นเช่นนั้น (C.J Data, 2000, p. 454) (“Recovery in a database system means, primarily, recovering the database itself: that is, restoring the database to a stase that is know to be correc (or,rather, consistent) after some failure has rendered the current state inconsistent, or at least suspect.”)
“ซึ่งคำว่าการขัดแย้ง” ในที่นี้หมายถึง “เป็นไปตามข้อกำหนดเรื่องความคงสภาพ” และโปรดสังเกตคำว่าความไม่ขัดแย้งที่ไม่จำเป็นต้อบงหมายถึง “ถูกต้อง” แม้ว่าสภาวะที่ไม่จำเป็นจะต้องไม่มีความขัดแย้งของข้อมูล แต่สภาวะที่ไม่มีความขัดแย้งอาจยังไม่ถูกต้องก็ได้
ส่วนประกอบของระบบที่ช่วยบังคับให้เกิด ความเป็นหนึ่งเดียว (Atomicity) ของธุรกรรมนี้ก็คือ ตัวจัดการธุรกรรม (Transaction Management) หรือ ตัวเฝ้าติดตามการประมวลผลธุรกรรม (Transaction Processing Monitor) โดยปฏิบัติการ 2 คำสั่งที่เป็นหัวใจสำคัญของการทำงานนี้ ได้แก่ COMMIT และ ROLLBACK
ปฏิบัติการ COMMIT จะส่งสัญญาณว่าธุรกรรมนั้นจบลงด้วนความสำเร็จโดยเป็นการแจ้งแก่ตัวจัดการธุรกรรมว่า หน่วยตรรกะแห่งการทำงานชุดนั้นสำเร็จสมบูรณ์แล้ว และฐานข้อมูลกลับมาอยู่มนภาวะที่ไม่มีความขัดแย้งอีกครั้งหนึ่งแล้ว รวมทั้งการปรับปรุงงข้อมูลที่เพิ่งทำไปสมควรจะถือว่าเป็นการกระทำที่ถาวรได้
ส่วนปฏิบัติการ ROLLBACK จะตรงกันข้าม กล่าวคือ จะเป็นการส่งสัญญาณว่าธุรกรรมนั้นจบลงด้วยความไม่สำเร็จ เป็นการบอกตัวจัดการธุรกรรมว่ามีบางสิ่งปรกติเกิดขึ้น ฐานข้อมูลอาจจะอยู่ในสภาวะที่มีการขัดแย้งกัน แลละการปรับปรุงข้อมูลที่เพิ่งทำไปจะต้องถูกย้อนหลับหรือยกเลิกการกระทำ
เสีย
ความขัดข้องที่เกิดขึ้นในระบบที่ควรมีการเตรียมการมีทั้ง ความขัดข้องเฉพาะที่ (Local Failure) ซึ่งมีผลกระทบกับธุรกรรมใดธุรกรรมหนึ่งเท่านั้น เช่น เกิดภาวะไหลล้นของข้อมูล(Overflow) และความขัดข้องโดยรวม (Global failure) ซึ่งมีผลกระทบกับธุรกรรมในระบบ ความขัดข้องโดยรวมมีได้ 2 กรณี คือ
1. ความขัดข้องของระบบ (System failures) เช่น ไฟฟ้าดับ ซึ่งกระทบทุกธุรกรรมแต่ไม่สร้างความเสียหายทางกายภาพแก่ฐานข้อมูล จัดเป็น การล้มแบบนุ่ม (Soft Crash)
2. ความถูกต้องของสื่อข้อมูล (Media Failures) เช่น การอ่านดิสก์ชำรุด ซึ่งจะก่อความเสียหายแก่ฐานข้อมูลทั้งหมดหรือบางส่วน อย่างนี้ถือเป็น การล้มแบบหนัก (Hard Crash)
ปัญหาที่สำคัญในการฟื้นสภาพ คือ ทำอย่างไรระบบจะรู้ว่าธุรกรรมใดควรจะทำการยกเลิก (Undo) และธุรกรรมใดควรจะทำซ้ำ (Redo) คำตอบ คือ ระบบต้องมีการ ทำการตรวจอัตโนมัติ (Automatically Taking a Checkpoint) คือ
1. เขียนเนื้อหาในหน่วยความจำชั่วคราวของฐานข้อมูล (Database Buffer) ลงในฐานข้อมูลทางกายภาพ
2. เขียนบันทึกจุดตรวจสอบลงในแฟ้มปูม (Physical Log)
ตัวอย่างของการทำการตรวจสอบอัตโนมัติดังภาพต่อไปนี้
จากจอภาพข้างบน เมื่อธุรกรรมใดเข้าสู่เขตเวลาตรวจสอบถือว่าจะต้องเข้าสู่กระบวนดารเริ่มต้นใหม่ (Restart process) หลังจากระบบเริ่มการทำงานอีกครั้ง โดยระบบจะดำเนินการ ดังนี้
ธุรกรรม T1 ระบบจะไม่ทำอะไรเพราะธุรกรรมนี้ถูกบันทึกลงฐานข้อมูลว่าสำเร็จเรียบร้อยแล้ว (อยู่นอกกระบวนการเริ่มจ้น)
ธุรกรรม T3 และ T5 ต้องถูกยกเลิกการกระทำ (การซ่อมแซมฐานข้อมูลให้อยู่ในภาวะข้อมูลไม่ขัดแย้งกันโดยการยกเลิกการกระทำหรือ ROLLBACK เรียกว่า Backward Recovery)
ธุรกรรม T2 และ T4 ต้องถูกทำซ้ำ (การซ่อมแซมฐานข้อมูลให้อยู่ในภาวะข้อมูลไม่ขัดแย้งกันโดยการทำซ้ำในส่วนของธุรกรรมที่ยังไม่ได้ COMMIT เรียกว่า Forward Recovery)
ดังกล่าวไว้แล้วว่า การควบคุมภาวะพร้อมกัน (Concurrency Control) นี้เกี่ยวข้องใกล้ชิดกับเรื่องการฟื้นสภาพ และทั้งสองเรื่องนี้เกี่ยวกับเรื่องใหญ่ คือ การจัดการธุรกรรม
ภาวะพร้อมกัน (Concurrency) หมายถึง กรณีที่ระบบรอหารฐานข้อมูลปรกยินยอมให้ธุรกรรมหลายตัวเข้าถึงฐานข้อมูลเดียว ณ เวลาเดียวกัน ซึ่งระบบจะต้องมีกลไกการควบคุมภาวะพร้อมกัน (Concurrency Control Mechanism) เพื่อให้มั่นใจว่า ธุรกรรมที่เข้ามาพร้อมกันนั้นไม่รบกวนหรือแทรกแซงกันและกัน
9.4.1 ปัญหาภาวะพร้อมกัน 3 กรณี
มีกรณีที่เป็นไปได้ 2 กรณีที่อาจเกิดขึ้นได้แม้ว่าตัวธุรกรรมนั้นจะถูกต้องในตัวของมันเอง เนื่องจากธุรกรรมอื่นเข้ามาแทรกแซงในทางใดทางหนึ่ง สาเหตุก็คือ การแทรกสลับ (Interleaving)ของปฏิบัติการของธุรกรรม 2 ตัว ซึ่งไม่สามารถควบคุมให้เหมาะสมได้เป็นสาเหตุที่ทำให้ผลลัพธ์ทั้งหมดออกมาผิดพลาด ซึ่งมีกรณีที่เป็นไปได้ ดังนี้
กรณีที่ 1 ปัญหาการปรับปรุงข้อมูลสูญหาย (The Lost Update Problem) มีลักษณะดังภาพต่อไปนี้
ธุรกรรม ก สูญเสียการปรับปรุงข้อมูล ณ เวลา ว4 เพราะถูกธุรกรรม ข มาปรับปรุงข้อมูลทับลงไปโดยไม่ทราบว่าข้อมูล ต นั้นไดถูกเปลี่ยนแปลงไปแล้วด้วยการกระทำของธุรกรรม ก ดังนั้น ธุรกรรม ข จึงเปลี่ยนแปลงข้อมูล ต เสียใหม่โดยไม่นำเอาการเปลี่ยนแปลงที่ธุรกรรม ก กระทำมาประกอบการพิจารณาเลยจึงทำให้สูญเสียการปรังปรุงข้อมูลที่ธุรกรรม ก ได้ทำไว้
กรณีที่ 2 ปัญหาที่เกิดจากการย้อนกลับ (The uncommitted Dependency Problem) มีลักษณะดังภาพต่อไปนี้
ธุรกรรม ก มองเห็นข้อมูลที่ไม่ถูกต้อง เนื่องจากธุรกรรม ข ได้ย้อนกลับ (Rollback) การกระทำไปแล้ว
หรืออีกตัวอย่างดังภาพต่อไปนี้
ข้อมูลที่ธุรกรรม ก ทำการปรับปรุงหายไป เนื่องจากธุรกรรม ข ได้ทำการย้อนกลับ (Rollback) การกระทำและละเว้นการปรับปรุงที่ธุรกรรม ก ได้ทำไว้
กรณีที่ 3 ปัญหาผลการวิเคราะห์ขัดแย้งกัน (The Inconsistent Analysis problem) มีลักษณะดังภาพต่อไปนี้
ธุรกรรม ก ได้ทำการวิเคราะห์ผลลัพธ์ที่ไม่สอดคล้องกับความเป็นจริง คือแทนที่ค่า sum จะเป็น 120 กลับได้พียง 110 เพราะค่าใน บช3 ถูกเปลี่ยนไปเป็น 20 เสียก่อนที่ธุรกรรม ก จะดำเนินการเสร็จสมบูรณ์
9.4.2 การควบคุมภาวะพร้อมกันด้วยการล็อก (Locking)
การล็อกเป็นเทคนิคการควบคุมภาวะพร้อมกันเพื่อแก้ปัญหา 3 กรณี ดังที่อธิบายมาข้างต้น การล็อกจะมีผลกระทบต่อธุรกรรมอื่น ๆ ไม่ให้เข้าสู่ทูเพิลที่ธุรกรรมแรกกำลังเข้าถึงอยู่ ดังนั้น ธุรกรรมใด ๆ จะกระทำการใด ๆ กับข้อมูล จะต้องได้ล็อก (Acquire a lock) วัตถุข้อมูลนั้นเสียก่อน ลักษณะการทำงานของการล็อกมีรายละเอียด ดังนี้
1. ระบบจะต้องสนับสนุนการล็อก 2 ประเภท ได้แก่ Exclusive Lock (หรือ X Lock หรือ Write Lock) และ Shared lock (หรือเรียกว่า S Lock หรือ Read Lock) ซึ่งจะสามารถทำการล็อกทูเพิลได้เท่านั้นในที่นี้
2. ถ้าธุรกรรม ก ถือครอง Exclusive Lock บนทูเพิล ต แล้ว ธุรกรรมอื่น ๆ จะถูกปฏิเสธการร้องขอล็อกทุกชนิดบนทูเพิล ต นั้น
3. ถ้าธุรกรรม ก ถือครอง Shared Lock แล้ว
3.1 การร้องขอ Exclusive Lock บนทูเพิล ต จะถูกปฏิเสธ
3.2 การร้องขอ Shared Lock บนทูเพิล ต จะได้รับอนุญาต
กฎเกณฑ์ดังกล่าวนี้สามารถอยู่ในตารางประเภทการล็อกที่เข้ากันได้ (Lock Yype Compatibility Matarix) ดังภาพ
T1\T2 |
X |
S |
- |
X |
N |
N |
Y |
S |
N |
Y |
Y |
- |
-Y |
Y |
Y |
เครื่องหมาย T1 หมายถึง ธุรกรรม ก
เครื่องหมาย T2 หมายถึง ธุรกรรม ข
เครื่องหมาย - หมายถึง ยังไม่มีการขอล็อกจากธุรกรรมใด
เครื่องหมาย X หมายถึง มีการขอ Exclusive Lock ไว้แล้ว
เครื่องหมาย S หมายถึง มีการขอ Shared Lock ไว้แล้ว
เครื่องหมาย Y หมายถึง อนุญาตให้ล็อกได้ทั้งสองธุรกรรม
เครื่องหมาย N หมายถึง ไม่สามรถให้ล็อกได้ ธุรกรรมตัวใด
ตัวหนึ่งจะต้องอยู่ใน สภาวะรอคอย (Wait State)
แนวทางแก้ไขปัญหาภาวะพร้อมกัน 3 กรณี
กรณีที่ 1 ปัญหาการปรับปรุงข้อมูลสูญหาย (The Lost Update Problem) อาจแก้ไขได้ดังภาพต่อไปนี้
จะเห็นว่าไม่มีการสูญเสียการปรับปรุงข้อมูลใด ๆ แต่เกิดปัญหา วงจรอับ (Deadlock) ขึ้น
ณ เวลา ว4
กรณีที่ 2 ปัญหาที่เกิดจากการย้อนกลับ (The Uncomitted Dependency Problem) อาจแก้ไขดังภาพต่อไปนี้
ธุรกรรม ก ถูกกันไม่ให้มองเห็นข้อมูลที่ไม่ถูกต้อง ณ เวลา ว2
หรืออีกตัวอย่างหนึ่งดังภาพต่อไปนี้
ธุรกรรม ก ถูกกันไม่ให้ปรับปรุงข้อมูลที่ไม่ถูกต้อง ณ เวลา ว2
กรณีที่ 3 ปัญหาการวิเคราะห์ขัดแย้งกัน (The Inconsistent Analysis Problem) อาจแก้ได้ดังภาพต่อไปนี้
วงจรอับ หรือ Deadlock คือ สถานการณ์ที่ธุรกรรม 2 ตัวขึ้นไปตกอยู่ในสภาวะรอคอยพร้อม ๆ กัน โดยแต่ละธุรกรรมกำลังรอคอยให้ธุรกรรมตัวอื่น ปลดปล่อยการล็อก เพื่อตนจะได้ทำงานต่อไปได้
ตัวอย่างของวงจรอับ 2 กรณี ได้แสดงให้เห็นแล้วดังภาพในหัวข้อก่อนหน้านี้ และในภาพต่อไปนี้จะแสดงตัวอย่างวงจรอับให้เห็นเพิ่มเติมอีกซึ่งเป็นกรณีทั่วไปซึ่งพบกันบ่อย ๆ ซึ่งจะมี ท1 และ ท2 หมายถึง ทรัพยากรที่สามารถถูกล็อกได้ ไม่จำเป็นจะต้องเป็นเฉพาะทูเพิลของฐานข้อมูล
ในภาพข้างบนนี้เป็นวงจรอับที่เกิดจากธุรกรรมสองตัว
ถ้าเกิดวงจรอับขึ้น ระบบจำเป็นจะต้องตรวจหาให้พบแล้วขจัดเสีย การตรวจหาวงจรอับอาจดูจากแผนภาพการรอคอย (Wait-For Graph) ซึ่งบอกให้ทราบว่าธุรกรรมกำลังรอธุรกรรมใดอยู่ ซึ่งจะช่วยให้ค้นหาจุดที่เกิดวงจรอับไดง่ายขึ้น
วิธีแก้วงจรอับ จะเริ่มจากการเลือกธุรกรรมตัวใดตัวหนึ่งที่ตกอยู่ในวงจรอับ โดยเรียกธุรกรรมที่ถูกเลือกว่าเป็น แพะหรือเหยื่อ (Victim) แล้วสั่งให้ธุรกรรมนั้นทำการย้อนกลับการกระทำหรือยกเลิกการทำงานของมันนั่นเอง ดังนั้น จึงเปิดโอกาสให้ธุรกรรมอื่นสามารถทำงานคืบหน้าต่อไปได้ ในทางปฏิบัติระบบส่วนใหญ่จะไม่ทำการตรวจสอบหาวงจรอับ แต่จะใช้วิธีที่เรียกว่า กลไกการหมดเวลา (Timeout Mechanism) ซึ่งจะคาดเดาว่าธุรกรรมใดก็ตามที่ไม่มีการทำงานอะไรเลยภายในช่วงระยะเวลาที่กำหนดไว้ช่วงหนึ่ง จัดเป็นธุรกรรมที่ตกอยู่ในวงจรอับ
หลังจากนั้นธุรกรรมที่ถูกเลือกเป็นแพะจะถูกถือว่าขัดข้องและต้องการกระทำย้อนกลับหรือยกเลิกการทำงานของธุรกรรมที่ทำไป จากนั้นบางระบบจะให้มีการเริ่มต้นทำธุรกรรมใหม่ในภายหลัง (ซึ่งไม่นานนัก) โดยคาดคะเนว่าเงื่อนไขของวงจรอับที่เคยเกิดขึ้นคงจะไม่เกิดขึ้นซ้ำอีก แต่บางระบบหลังจากเรียกแพะแล้วจะส่ง สัญญาณ “แพะวงจรอับ” (“Deadlock Victim” Exception Code) กลับไปยังโปรแกรมประยุกต์เพื่อให้เป็นผู้ตัดสินใจเองว่าจะจัดการกับแพะนั้นอย่างไร โปรแกรมเมอร์ส่วนใหญ่จะชอบวิธีแรกมากกว่าแต่ว่าจะอย่างไร ปัญหาวงจรอับดังกล่าวก็ควรจะถูกซ่อนบังไม่ให้ผู้ใช้ต้องรับทราบใด ๆ ทั้งสิ้น
9.5 การรักษาความปลอดภัยของระบบฐานข้อมูล
การรักษาความปลอดภัย หมายถึง การป้องกับข้อมูลต่อผู้ใช้ที่ไม่มีสิทธิ์ (Security means protecting the data against unauthorized users.) นั่นคือ เป็นการป้องกันไม่ให้ผู้ไม่มีสิทธิ์เข้าถึงข้อมูลในฐานข้อมูล สามารถเข้าถึงได้หากเปรียบเทียบกับความหมายของความถูกต้องในมุมมองนี้จะคล้าย ๆ กัน กล่าวคือ ความถูกต้องของข้อมูล หมายถึง การป้องกันข้อมูลต่อผู้ที่ไม่มีสิทธ์ใช้ (Security means protecting the data against unauthorized users.) แต่ใช้ไม่ถูกต้อง เพื่อไม่ให้ผู้ใช้ดังกล่าวทำการปรับปรุงข้อมูลในฐานข้อมูลอย่างไม่ถูกต้อง (C.J Data 2000, p. 504-505)
- ข้อควรคำนึงเกี่ยวกับการรักษาความปลอดภัย (General Considerations)
- วิธีการควบคุมความปลอดภัยข้อมูล (Access Controls)
วิธีการควบคุมการเข้าถึงข้อมูลมีอยู่ 2 วิธี คือ
- การควบคุมแบบรายย่อย (Data Discretionary Control)
- การควบคุมแบบบังคับรวม (Data Mandatory Control)
ระบบจัดการฐานข้อมูลส่วนใหญ่จะใช้วิธีการนี้ และบางระบบจะใช้ทั้งสองวธีประกอบกัน
1. การควบคุมแบบรายย่อย (data Discretionary Control)
วิธีที่ผู้ใช้แต่ละรายจะมีสิทธิ์ในการเข้าถึงวัตถุในฐานข้อมูลแตกต่างกัน วิธีนี้ค่อนข้างหยืดหยุ่นเพราะจะมีการกำจัดสิทธิ์น้อยมาก กล่าวคือ บอกเพียงว่าผู้ใช้คนใดมีสอทธิ์บนวัตถุใด เช่น ผู้ใช้ชื่อ U1 สามารถดูวัตถุชื่อ A ได้ แต่ไม่สามรถเห็นวัตถุ B ขณะเดียวกันผู้ใช้ U2 สามารถเห็นวัตถุ B แต่ไม่สามารถเห็นวัตถุ A
ตัวอย่างข้อกำหนดความปลอดภัย (Security Constraint) ที่ควบคุมแบบรายย่อย
AUTHORITY SA3
GRANT RETRIEVE (SNO,SNAME,CITY),DELETE
ON S
TO Jim,Fred,Mary;
ชื่อของการควบคุม คือ SA3
สิทธิ์ที่ให้ คือ คืบค้นและลบค่าข้อมูลในแอตทริบิวต์ในตาราง S
ผู้ใช้ที่ได้รับสิทธิ์ คือ จิม เฟรด และแมรี่
- การควบคุมแบบบังคับรวม (data Mandatory Control)
วิธีนี้จะมองมุมตรงกันข้ามกับวิธีแรก คือ วัตถุข้อมูลแต่ละตัวจะถูกกำหนดระดับชั้นความสำคัญ (Classification Level) ไว้ไม่เท่ากัน ส่วนผู้ใช้แต่ละคนก็จะมีระดับการเข้าถึง (Clearance Level) ต่างกันไป ซึ่งวิธีการนี้มีลักษณะเป็นแบบลดหลั่นตามลำดับชั้นโดยธรรมชาติ (Hierarchic in Nature) กล่าวคือ ถ้าผู้ใช้ชื่อ U1 สามารถดูวัตถุชื่อ A ได้ แต่ไม่สามารถดูวัตถุชื่อ B ได้ แล้วแสดงว่าลำดับชั้นความสำคัญของวัตถุ B สูงกว่า A หากผู้ใช้ U2 สามารถมองเห็นวัตถุ B ได้เขาย่อมมีสิทธิ์มองเห็นวัตถุ A ได้ด้วย
ผลที่ได้ก็คือ ข้อความที่เข้ารหัสแล้ว (Ciphertext) ดังตัวอย่างต่อไปนี้ (Kenneth H. Rosen, 1999, p. 124-125)
ข้อความปรกติ |
MEET YOU |
แปลงเป็นค่าตัวเลขตำแหน่ง คือ |
12 4 4 19 24 14 20 |
จากนั้นใช้ขั้นตอนการเข้ารหัสแบบ Caesar Cipher คือ เอาตัวเลขตำแหน่งแต่ละจำนวนมาบวกด้วย 3 จะได้ |
15 7 7 22 1 17 23 |
ซึ่งถ้าถูกแปลงเป็นตัวอักษรจะไม่สามารถอ่านเข้าใจได้ จึงเป็นการรักษาความลับไว้ได้ คือ |
PHHW BRX |
วิธีการข้างต้นนี้นักคณิตศาสตร์ได้นำมาอธิบายว่า วิธีการเข้ารหัสแบบซีซาร์สามารถแทนได้ด้วยฟังก์ชั่น f ซึ่งกำหนดให้แก่จำนวนเต็มบวก p โดยที่ < 25 ดังนั้นจำนวนเต็ม f(p) ในเซต {0,1,2,….,25} จะถูกเข้ารหัสด้วยสูตร (ในที่นี้ k = 3)
f(p) = (p + k) modulo 26
และสามารถถอดรหัสได้ด้วยสูตรฟังก์ชั่นอินเวอร์ส คือ
f(p) = (p - k) modulo 26
C = Pe modulo r
วิธีเข้ารหัสข้อมูลได้รับการพัฒนาอย่างต่อเนื่องและมีผู้คิดค้นวิธีการต่าง ๆ มากมาย จวบจนปัจจุบัน
มีวิธีการเข้ารหัสที่เป็นที่ยอมรับกันในวงกว้างก็คือ วิธีการแบบ RSA ซึ่งมีวิธีคิดขึ้นมาโดยนักวิจัยแห่งสถาบัน MIT เมื่อปี ค.ศ. 1976
นักวิจัยทั้ง 3 สามคนได้รับเกียตริให้เอาตัวอักษรแรกของสกุลมาตั้งเป็นชื่อวิธีการนี้ ได้แก่ Ron Rivest, Adi Shamir, และ Len Adleman วิธีการดเข้าข้อมูลแบบ RSA นี้มีสูตรว่า
โดยที่ C หมายถึง จำนวนเต็มที่แทนข้อความที่เข้ารหัส
P หมายถึง ข้อความปรกติ หรือ plain text
E หมายถึง ตัวเลขที่เป็นกุญแจของฝ่ายส่ง ซึ่งเป็นจำนวนเฉพาะกับค่า (p-1)(q-1) โดยที่ r = pq
ส่วนสูตรที่ใช้ในกการเข้ารหัสก็คือ
P = C modulo r
D หมายถึง ตัวเลขที่เป็นกุญแจซึ่งเป็นตัวคู่ข้ามกันกับ e modulo (p-1)(q-1) โดยที่ d* e=1 modulo (p-1) * (q-1)
ตัวอย่าง
ให้ p = 3, q = 5, แล้ว r = 15, และผลคูณของ (p-1)(q-1) =8
ให้ e = 11 (ซึ่งเป็นจำนวนเฉพาะซึ่งมากกว่าค่าของ p และ q)
เมื่อคำนวณหาค่า d จะได้ว่า
d *11 = 1 modulo 8
ดังนั้น จึงได้ d = 3
ให้ข้อความปรกติ หรือ Plain text p คือ ค่าจำนวนเต็ม 13 จะได้จำนวนที่เข้ารหัสแล้วดังนี้
C = P modulo r
= 13 modulo 15
= 1,792,160,394,037 modulo 15
= 7
จากนั้นนำ 7 มาถอดรหัส ทำได้ดังนี้
P = C modulo r
= 7 modulo 15
= 343 modulo 15
= 13
จากตัวอย่างดังกล่าวจึงมีการประยุกต์ให้ e เป็น Private Key ให้ฝ่ายที่จะส่งข่าวสารของตน (เช่น ลูกค้า) เก็บรักษาเอาไว้ เมื่อส่งข่าวสารที่เข้ารหัสแล้ว (ในตัวอย่าง คือ 7 ) ทางผู้รับข่าวสาร (คือ ผู้ขาย) จะมี d เป็น Public Key เก็บไว้สำหรับผู้ที่ติดต่อมา (คือ ลูกค้ารายนี้) ซึ่งทำให้ทราบได้ว่าใครเป็นผู้ติดต่อมา และเก็บความลับได้ดีกว่า เนื่องจากต้องรู้คีย์ทั้ง 2 คีย์จึงสามารถถอดรหัสข้อมูลได้อย่างถูกต้อง