 |
|
|
|
ThaiCERT:
Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย |
|
| |
| |
|
ชื่อเรื่อง : เรื่องน่ารู้เกี่ยวกับความปลอดภัยของ
MySQL Server
เรียบเรียงโดย : มนัชยา ชมธวัช
เผยแพร่เมื่อ : 18 พฤศจิกายน 2545
MySQL เป็นฐานข้อมูลแบบ open source ที่ได้รับความนิยมในการใช้งานสูงสุดโปรแกรมหนึ่งบนเครื่องให้บริการ
มีความสามารถในการจัดการกับฐานข้อมูลด้วยภาษา SQL (Structures Query Language)
อย่างมีประสิทธิภาพ มีความรวดเร็วในการทำงาน รองรับการทำงานจากผู้ใช้หลายๆ คนและหลายๆ
งานได้ในขณะเดียวกัน
MySQL ถูกพัฒนาขึ้นโดย MySQL AB โดยมีลิขสิทธิ์การใช้งาน 2 แบบ นั่นคือ ผู้ดูแลระบบสามารถใช้งานซอฟต์แวร์
MySQL ได้โดยไม่มีค่าใช้จ่ายใดๆ ภายใต้ลิขสิทธิ์ของ GNU General Public License
(http://www.gnu.org/licenses/) หรืออาจเลือกใช้แบบที่มีลิขสิทธิ์ทางการค้าของ
MySQL AB ซึ่งเป็นผู้ผลิตและพัฒนาซอฟต์แวร์โดยตรงก็ได้ หากไม่ต้องการเกี่ยวข้องกับข้อตกลงเรื่อง
GPL รายละเอียดเพิ่มเติมเกี่ยวกับโปรแกรม MySQL สามารถหาข้อมูลได้จาก http://www.mysql.com
คำอธิบายเพิ่มเติมเกี่ยวกับหน้าที่ ความสามารถและการทำงานของโปรแกรม MySQL มีดังต่อไปนี้
- MySQL ถือเป็นระบบจัดการฐานข้อมูล (DataBase Management System (DBMS))
ฐานข้อมูลมีลักษณะเป็นโครงสร้างของการเก็บรวบรวมข้อมูล การที่จะเพิ่มเติม เข้าถึงหรือประมวลผลข้อมูลที่เก็บในฐานข้อมูลจำเป็นจะต้องอาศัยระบบจัดการฐานข้อมูล
ซึ่งจะทำหน้าที่เป็นตัวกลางในการจัดการกับข้อมูลในฐานข้อมูลทั้งสำหรับการใช้งานเฉพาะ
และรองรับการทำงานของแอพลิเคชันอื่นๆ ที่ต้องการใช้งานข้อมูลในฐานข้อมูล เพื่อให้ได้รับความสะดวกในการจัดการกับข้อมูลจำนวนมาก
MySQL ทำหน้าที่เป็นทั้งตัวฐานข้อมูลและระบบจัดการฐานข้อมูล
- MySQL เป็นระบบจัดการฐานข้อมูลแบบ relational
ฐานข้อมูลแบบ relational จะทำการเก็บข้อมูลทั้งหมดในรูปแบบของตารางแทนการเก็บข้อมูลทั้งหมดลงในไฟล์เพียงไฟล์เดียว
ทำให้ทำงานได้รวดเร็วและมีความยืดหยุ่น นอกจากนั้น แต่ละตารางที่เก็บข้อมูลสามารถเชื่อมโยงเข้าหากันทำให้สามารถรวมหรือจัดกลุ่มข้อมูลได้ตามต้องการ
โดยอาศัยภาษา SQL ที่เป็นส่วนหนึ่งของโปรแกรม MySQL ซึ่งเป็นภาษามาตรฐานในการเข้าถึงฐานข้อมูล
- MySQL แจกจ่ายให้ใช้งานแบบ open source
นั่นคือ ผู้ใช้งาน MySQL ทุกคนสามารถใช้งานและปรับแต่งการทำงานได้ตามต้องการ
สามารถดาวน์โหลดโปรแกรม MySQL ได้จากอินเทอร์เน็ตและนำมาใช้งานโดยไม่มีค่าใช้จ่ายใดๆ
ในระบบปฏิบัติการ Red Hat Linux นั้น มีโปรแกรมที่สามารถใช้งานเป็นฐานข้อมูลให้ผู้ดูแลระบบสามารถเลือกใช้งานได้หลายโปรแกรม
เช่น MySQL และ PostgreSQL ผู้ดูแลระบบสามารถเลือกติดตั้งได้ทั้งในขณะที่ติดตั้งระบบปฏิบัติการ
Red Hat Linux หรือจะติดตั้งภายหลังจากที่ติดตั้งระบบปฏิบัติการก็ได้ อย่างไรก็ตาม
สาเหตุที่ผู้ใช้งานจำนวนมากนิยมใช้งานโปรแกรม MySQL คือ MySQL สามารถทำงานได้อย่างรวดเร็ว
น่าเชื่อถือและใช้งานได้ง่าย เมื่อเปรียบเทียบประสิทธิภาพในการทำงานระหว่างโปรแกรม
MySQL และ PostgreSQL โดยพิจารณาจากการประมวลผลแต่ละคำสั่งได้ผลลัพธ์ดังรูปที่
1
นอกจากนั้น MySQL ถูกออกแบบและพัฒนาขึ้นมาเพื่อทำหน้าเป็นเครื่องให้บริการรองรับการจัดการกับฐานข้อมูลขนาดใหญ่
ซึ่งการพัฒนายังคงดำเนินอยู่อย่างต่อเนื่อง ส่งผลให้มีฟังก์ชันการทำงานใหม่ๆ ที่อำนวยความสะดวกแก่ผู้ใช้งานเพิ่มขึ้นอยู่ตลอดเวลา
รวมไปถึงการปรับปรุงด้านความต่อเนื่อง ความเร็วในการทำงาน และความปลอดภัย ทำให้
MySQL เหมาะสมต่อการนำไปใช้งานเพื่อเข้าถึงฐานข้อมูลบนเครือข่ายอินเทอร์เน็ต

รูปที่ 1 แสดงผลการเปรียบเทียบการทำงานระหว่างโปรแกรม MySQL และ
PostgreSQL
ความเสี่ยงและวิธีการสร้างความปลอดภัยให้ฐานข้อมูล
ก่อนที่จะกล่าวถึงขั้นตอนการปรับแต่งค่าความปลอดภัยให้กับโปรแกรม MySQL ผู้ดูแลระบบควรจะต้องทราบถึงความเสี่ยงที่เกิดขึ้นจากการใช้งานฐานข้อมูลและหลักปฏิบัติโดยทั่วไปในการสร้างความปลอดภัยให้ฐานข้อมูลก่อน
ซึ่งรายละเอียดที่จะอธิบายในหัวข้อนี้จะกล่าวถึงภาพรวม เพื่อให้ผู้ดูแลระบบสามารถนำไปประยุกต์ใช้ได้กับฐานข้อมูลชนิดอื่นๆ
ความปลอดภัยของฐานข้อมูลเป็นสิ่งสำคัญมาก เนื่องจากข้อมูลที่เก็บไว้ในฐานข้อมูลถือเป็นองค์ประกอบหลักในการดำเนินงานขององค์กรและมีความอ่อนไหวค่อนข้างสูง
ได้แก่ เช่น ข้อมูลทางธุรกิจ ข้อมูลลูกค้า ข้อมูลพนักงาน ข้อมูลลับหรือข้อมูลที่เผยแพร่บนเว็บไซต์ขององค์กร
วิธีการสร้างความปลอดภัยให้กับฐานข้อมูลค่อนข้างเป็นเรื่องเฉพาะ และมีความซับซ้อนแตกต่างจากการสร้างความปลอดภัยให้กับเครือข่ายหรือระบบปฏิบัติการ
ทั้งนี้ จุดบกพร่องที่ทำให้เกิดความเสี่ยงต่อความไม่ปลอดภัยของฐานข้อมูลมีสาเหตุจาก
ความซับซ้อนของระบบฐานข้อมูล การเก็บรหัสผ่านอย่างไม่ปลอดภัย การตั้งค่าการทำงานที่ผิดพลาด
หรือ backdoor ของระบบที่ผู้ดูแลระบบไม่ทราบ การลดความเสี่ยงของข้อบกพร่องเหล่านี้ทำได้โดยการกำหนดหลักปฏิบัติในการใช้งานฐานข้อมูลดังนี้
- ให้สิทธิ์การใช้งานกับผู้ใช้ตามความจำเป็นเท่านั้น ผู้ใช้งานฐานข้อมูลแต่ละคนควรจะได้รับสิทธิ์การใช้งานเฉพาะที่จำเป็นต่อการดำเนินงานของแต่ละคน
- ทำการป้องกันในหลายๆ ระดับ เช่น ระดับของการขอเข้าใช้งาน ระดับของสิทธิ์การใช้งาน
หรือระดับของขอบเขตของฐานข้อมูลที่ให้ใช้งาน
- การป้องกันการบุกรุกเป็นสิ่งที่ควรปฏิบัติ แต่ผู้ดูแลจะต้องตรวจสอบการละเมิดความปลอดภัยด้วย
- นำกระบวนการเข้ารหัสมาใช้งานหากเป็นไปได้
- กำหนดนโยบายและขั้นตอนปฏิบัติด้านความปลอดภัยที่ชัดเจน รัดกุม
การสร้างความปลอดภัยให้กับฐานข้อมูลจะต้องตั้งอยู่บนพื้นฐานต่อไปนี้ คือ
- ความลับและความปลอดภัย: ข้อมูลจะต้องไปถูกเปิดเผยต่อผู้ที่ไม่ได้รับสิทธิ์ในการเข้าถึง
- ความถูกต้อง ความสมบูรณ์และการตรวจสอบตัวตนผู้ใช้งาน: ข้อมูลจะต้องไม่ถูกแก้ไขหรือยักยอกทั้งโดยเจตนาร้ายหรือโดยไม่เจตนาก็ตาม
นอกจากนั้น จะต้องพิสูจน์ได้ว่าต้นทางของข้อมูลมาจากที่ใดหรือใคร
- ความพร้อมใช้และความสามารถในการกู้คืน: ระบบฐานข้อมูลจะต้องถูกปกป้องให้พร้อมใช้งานได้ตลอดเวลา
รวมถึงจะต้องกู้คืนได้หากข้อมูลสูญหาย
นอกจากนั้น การสร้างความปลอดภัยให้กับฐานข้อมูลจำเป็นต้องมั่นใจว่าได้มีการป้องกันถึงระดับลึก
ได้แก่ การสร้างความปลอดภัยให้กับเครือข่าย ซึ่งอาจทำได้โดยการป้องกันที่ไฟร์วอลล์
เราเตอร์ ระบบตรวจจับผู้บุกรุก (IDS) และการสร้างความปลอดภัยให้กับระบบปฏิบัติการ
เพื่อให้แน่ใจได้ว่าการเข้าถึงฐานข้อมูลโดยไม่ได้รับอนุญาตจะไม่เป็นผลมาจากการกำหนดค่าที่ผิดพลาดให้กับระบบปฏิบัติการและอุปกรณ์เหล่านั้น
หลักการสำคัญในการสร้างความปลอดภัยให้กับฐานข้อมูลนั้น ผู้ดูแลระบบควรจะคำนึงถึงองค์ประกอบต่อไปนี้
เพื่อนำไปพิจารณาประยุกต์ใช้กับระบบฐานข้อมูลของตนเองตามความเหมาะสม
- การตรวจสอบตัวตนผู้ใช้งาน
จะต้องมั่นใจว่ามีการตรวจสอบตัวตนของผู้ใช้งานทุกคนที่ติดต่อกับฐานข้อมูล ในระดับต่ำสุดคือการนำเอารหัสผ่านมาใช้งานสำหรับทุกการติดต่อ
ซึ่งรหัสผ่านเหล่านี้จะต้องได้รับการเก็บรักษาอย่างปลอดภัยในฐานข้อมูลและถูกเข้ารหัสอย่างเหมาะสม
ควรมีข้อกำหนดนเรื่องการใช้งานรหัสผ่าน ได้แก่ กำหนดความยาวขั้นต่ำของรหัสผ่านที่ใช้
กำหนดว่ารหัสผ่านจะต้องประกอบด้วยตัวอักษรหรือตัวเลขรวมกับอักขระพิเศษ และไม่ให้ใช้งานรหัสผ่านที่เดาได้ง่าย
เป็นต้น
- การควบคุมการเข้าถึงออบเจ็กต์ใดๆ และการตรวจสอบแอพลิเคชันที่อนุญาตให้ใช้งาน
ออบเจ็กต์ของฐานข้อมูลประกอบด้วย ตาราง ซินโนนีมม์ (synonymn) วิว (view) อินเด็กซ์
(index) สตอร์โพรซีเจอร์ (store procedure) และทริกเกอร์ (trigger) ซึ่งสามารถควบคุมการอนุญาตให้เข้าถึงออบเจ็กต์เหล่านี้ได้โดยกำหนดไว้ที่สิทธิ์การใช้งานฐานข้อมูล
ซึ่งควรได้รับการกำหนดตั้งแต่ขั้นตอนของการออกแบบ ทั้งนี้ผู้ดูแลฐานข้อมูลหรือผู้ออกแบบฐานข้อมูลจะต้องคำนึงถึงหลักการที่จะให้สิทธิ์แก่ผู้ใช้งานแต่ละคนให้น้อยที่สุดเท่าที่จะเป็นไปได้
การควบคุมการเข้าถึงออบเจ็กต์เหล่านี้ มีวิธีการที่แตกต่างกันตามแต่ละชนิดของออบเจ็กต์
เช่น การใช้ซินโนนีมม์จะช่วยให้การอ้างถึงแต่ละตารางในฐานข้อมูลสามารถทำได้โดยไม่จำเป็นต้องทราบว่าเจ้าของตารางดังกล่าวคือใคร
เป็นการซ่อนโครงสร้างของฐานข้อมูลจากผู้ใช้งานโดยที่ผู้ดูแลยังสามารถตรวจสอบได้ว่าใครมาใช้ตารางใดในฐานข้อมูลบ้าง
การสร้างความปลอดภัยให้กับออบเจ็กต์วิว ทำได้โดยการควบคุมการเข้าถึงในระดับแถวและคอลัมน์ก่อนที่แต่ละตารางจะถูกนำมารวมไว้ด้วยกัน
เป็นต้น
หรือหากใช้งานสถาปัตยกรรม 3-tier ซึ่งมีแอพลิเคชันเซิร์ฟเวอร์ทำหน้าที่รอรับการเรียกใช้งานแอพลิเคชันทั้งหมดจากเครื่องขอเข้าใช้บริการและติดต่อกับฐานข้อมูล
จำเป็นต้องกำหนดให้เครื่องขอใช้งานแสดงตัวตนกับเครื่องแอพลิเคชันเซิร์ฟเวอร์
และให้แอพลิเคชันเซิร์ฟเวอร์แสดงตัวตนกันกับฐานข้อมูลก่อนจึงจะอนุญาตให้เข้าใช้งานตามต้องการได้
- นโยบายและขั้นตอนปฏิบัติในการดูแลระบบ
ต้องกำหนดนโบายที่ชัดเจนเกี่ยวกับการใช้งานและการดูแลระบบ พร้อมทั้งกำหนดขั้นตอนปฏิบัติต่างๆ
มาบังคับใช้ตามนโยบายดังกล่าวเป็นลายลักษณ์อักษร โดยแสดงรายละเอียดถึงข้อบังคับด้านความปลอดภัยและการบริหารความเสี่ยง
ภายในต้องประกอบด้วยมาตรฐานการใช้งานบัญชีรายชื่อผู้ใช้ รหัสผ่าน กฎและออบเจ็กต์
รวมถึงการตรวจสอบและการบันทึกล็อก
- การใช้งานค่า configuration เริ่มต้นที่ปลอดภัย
ฐานข้อมูลบางชนิดจะมีชื่อผู้ใช้และรหัสผ่านที่กำหนดไว้เป็นค่าดีฟอลต์เริ่มต้น
ซึ่งเป็นที่ทราบกันดีในกลุ่มผู้ใช้ ค่าดังกล่าวนี้ทำให้ผู้ที่ทราบสามารถเข้าถึงฐานข้อมูลได้ในหลายระดับ
ดังนั้นผู้ดูแลจึงควรยกเลิกหรือเปลี่ยนแปลงค่ารหัสผ่านทันทีหลังจากเข้าใช้งานครั้งแรก
นอกจากนั้น ไฟล์ที่เกี่ยวข้องกับการทำงานของระบบฐานข้อมูลจะต้องได้รับการจำกัดการเข้าถึง
ทั้งเพื่ออ่าน เขียนหรือเรียกใช้งานจากผู้ไม่เกี่ยวข้อง เพื่อที่ผู้บุกรุกจะไม่สามารถเปลี่ยนแปลงค่าการทำงานใดๆ
ได้ สิ่งที่สำคัญที่สุดก็คือ ผู้ดูแลระบบจะต้องปรับแต่งค่าการทำงานให้เหมาะสมกับระบบและการใช้งานของตน
- การตรวจสอบการทำงาน
การตรวจสอบการทำงานของฐานข้อมูลช่วยให้ผู้ดูแลสามารถตรวจจับกิจกรรมที่เกิดขึ้นโดยไม่ได้รับอนุญาตหรือกิจกรรมที่มีจุดประสงค์ร้าย
กิจกรรมที่ควรได้รับการตรวจสอบระบบประกอบด้วย
- ความพยามยามในการติดต่อฐานข้อมูลที่ไม่ประสบความสำเร็จ
- การเปิดและปิดฐานข้อมูล
- การเรียกดู การแก้ไขและการลบข้อมูลออกจากตาราง
- การสร้างและการลบออบเจ็กต์
- การเรียกใช้งานโปรแกรม
ผู้ดูแลควรจัดเก็บข้อมูลเหล่านี้ไว้ในรูปของไฟล์ล็อกหรือฐานข้อมูลล็อก ซึ่งข้อมูลที่ควรเก็บบันทึกในล็อกประกอบด้วย
ใครเป็นผู้สร้างข้อมูล ใครเป็นผู้แก้ไขข้อมูล และข้อมูลใดที่ถูกเปลี่ยนแปลงแก้ไข
เป็นต้น
- แผนการสำรองข้อมูลและการกู้คืนระบบ
ความเสียหายของฐานข้อมูล การถูกทำลายโดยอุบัติเหตุ และกิจกรรมที่เกิดขึ้นโดยไม่ได้รับอนุญาตหรือมีจุดประสงค์ร้ายต่อฐานข้อมูล
อาจนำไปสู่ความเสียหายอย่างรุนแรงของฐานข้อมูล หากขาดแผนการสำรองข้อมูลที่เหมาะสม
กระบวนการสำรองข้อมูลและการกู้คืนระบบควรจะได้รับการทดสอบในช่วงเวลาปกติ และการเก็บข้อมูลสำรองไว้ภายนอกองค์กรจะช่วยให้การกู้คืนข้อมูลจากความเสียหายทำได้รวดเร็ว
กระบวนการสำรองข้อมูลควรจะได้รับการทดสอบให้มั่นใจว่า
- พนักงานเกิดความเชื่อมั่นต่อวิธีการกู้คืนข้อมูล
- แผนการสำรองข้อมูลและการกู้คืนระบบได้รับการวิเคราะห์ตรวจสอบอย่างเหมาะสม
- ผู้ดูแลสามารถอ่านข้อมูลจากเทปสำรองข้อมูลโดยใช้ไดรฟ์อื่นต่างหากจากที่ใช้ในการเขียนข้อมูลได้
นอกจากนั้น แผนการสำรองข้อมูลจะต้องกำหนดถึงวิธีการในการสำรองข้อมูล ซึ่งมีทางเลือกให้ใช้งานได้หลายรูปแบบ
ได้แก่
- การสำรองข้อมูลแบบ cold คือการสำรองข้อมูลในขณะที่ไม่มีการใช้งานฐานข้อมูล
- การสำรองข้อมูลแบบ hot คือการสำรองข้อมูลในขณะที่ฐานข้อมูลถูกใช้งาน
- การสำรองข้อมูลแบบ logical คือการสำรองข้อมูลในช่วงเวลาใดช่วงเวลาหนึ่ง
ในขณะที่ฐานข้อมูลถูกใช้งาน
การสร้างความปลอดภัยให้โปรแกรม MySQL
ผู้ดูแลระบบที่ใช้งานโปรแกรม MySQL เป็นฐานข้อมูลในเครื่องให้บริการใดๆ จำเป็นต้องทราบถึงวิธีการสร้างความปลอดภัยให้กับโปรแกรม
MySQL ที่ใช้งาน เนื่องจากการใช้งานฐานข้อมูลทำให้เกิดความเสี่ยงต่อความปลอดภัยของเครื่องตามที่ได้อธิบายแล้วข้างต้น
สำหรับหัวข้อนี้จะแสดงรายละเอียดถึงวิธีการในการสร้างความปลอดภัยให้โปรแกรม MySQL
บนระบบปฏิบัติการ Red Hat Linux โดยเฉพาะ
หากผู้ดูแลระบบติดตั้งโปรแกรม MySQL โดยเลือกติดตั้งในขณะที่ติดตั้งระบบปฏิบัติการ
หรือติดตั้งโดยใช้แพ็คเกจชนิด RPM จะมีข้อดีคือ ผู้ดูแลระบบจะสามารถใช้โปรแกรม
up2date (ตามที่ได้อธิบายไว้ในบทก่อนหน้านี้)
ในการตรวจสอบแก้ไขช่องโหว่ที่เกิดขึ้นกับโปรแกรมได้ ในทางตรงกันข้าม หากผู้ดูแลระบบเลือกติดตั้งโปรแกรมโดยคอมไพล์จากไฟล์ต้นฉบับด้วยตนเอง
จะมีข้อดีคือโปรแกรม MySQL ที่ได้จะมีความยืดหยุ่นมากกว่า ผู้ดูแลระบบสามารถเลือกออปชันและไลบรารี่ที่จะใช้งานได้ตามต้องการมากกว่า
อย่างไรก็ตาม ไม่มีออปชันใดๆ เกี่ยวข้องกับการสร้างความปลอดภัยที่ควรได้รับการพิจารณาเป็นพิเศษในการติดตั้งโปรแกรม
MySQL โดยการคอมไพล์จากไฟล์ต้นฉบับ จึงไม่นำมาอธิบายในที่นี้ สำหรับผู้ดูแลระบบที่ต้องการดาวน์โหลดโปรแกรม
MySQL หรือตรวจสอบเวอร์ชันของโปรแกรม MySQL ที่จะใช้งาน สามารถหาข้อมูลได้ที่ http://www.mysql.com/downloads/index.html
ก่อนที่จะอธิบายถึงวิธีการสร้างความปลอดภัยให้โปรแกรม MySQL จะขออธิบายถึงการทำงานของโปรแกรม
MySQL สักเล็กน้อย โปรแกรม MySQL ทำงานเป็นฐานข้อมูลและระบบจัดการฐานข้อมูลบนเครื่องให้บริการ
โดยเปิดให้ผู้ใช้งานติดต่อฐานข้อมูลผ่านพอร์ต 3306 บนโพรโตคอล TCP ของเครื่องให้บริการ
(ค่าดีฟอลต์ของโปรแกรม) หลังจากที่สั่งให้โปรแกรม MySQL เริ่มต้นทำงานจะเกิดการสร้างเดมอนชื่อ
mysqld ไว้รอรับการติดต่อ ซึ่งการใช้งานฐานข้อมูลทำได้ 2 วิธีคือ การเข้าใช้ฐานข้อมูลโดยตรงผ่านโปรแกรม
mysql และการใช้งานผ่านโปรแกรมที่เขียนขึ้นเพื่อใช้ติดต่อฐานข้อมูล เช่น โปรแกรมที่ถูกเขียนขึ้นด้วยภาษา
PHP เป็นต้น ผู้ที่จะเข้าใช้งานฐานข้อมูลได้จะต้องได้รับการตรวจสอบสิทธิ์และพิสูจน์ตัวตนผู้ใช้
ซึ่งบัญชีรายชื่อผู้ใช้ของโปรแกรม MySQL นี้แยกจากบัญชีผู้ใช้งานของระบบโดยเด็ดขาด
ไม่มีความเกี่ยวข้องกันแต่อย่างใด โดยจะถูกจัดเก็บและจัดการผ่านฐานข้อมูลของ MySQL
ที่ใช้งาน นอกจากนั้น ผู้ดูแลระบบควรจะสร้างผู้ใช้งานในระบบชื่อ mysql และกลุ่มผู้ใช้ชื่อ
mysql มารองรับการทำงานของโปรแกรม MySQL ซึ่งจะอธิบายถึงการนำไปใช้ในลำดับต่อไป
วิธีการสร้างความปลอดภัยให้กับโปรแกรม MySQL ทำได้ในหลายระดับ ซึ่งผู้ดูแลระบบสามารถเลือกนำไปปฏิบัติได้ตามรูปแบบและจุดประสงค์การใช้งาน
แบ่งเป็นส่วนๆ ได้ดังนี้
- การเริ่มต้นใช้งาน และการเรียกใช้งานโปรแกรม MySQL
- ระบบและวิธีการตรวจสอบสิทธิ์ของโปรแกรม MySQL
- ไฟล์ล็อกของโปรแกรม MySQL
- การจัดการเกี่ยวกับเจ้าของไฟล์ที่เกี่ยวข้องกับโปรแกรม MySQL ในระบบปฏิบัติการ
- ข้อควรระวังที่เกี่ยวข้องกับความปลอดภัยของโปรแกรม MySQL
ซึ่งจะได้อธิบายแต่ละหัวข้อโดยละเอียดในลำดับต่อไป
การเริ่มต้นใช้งาน และการเรียกใช้งานโปรแกรม MySQL
หลังจากที่ผู้ดูแลระบบติดตั้งโปรแกรม MySQL แล้ว ผู้ดูแลระบบจะต้องสั่งให้โปรแกรม
MySQL สร้างฐานข้อมูลเริ่มต้นโดยใช้คำสั่ง # ./mysql_install_db
ทำให้เกิดการสร้างฐานข้อมูล 2 ฐานข้อมูล คือ mysql และ test
การสั่งให้โปรแกรม MySQL เริ่มต้นทำงานทำได้โดยการสั่ง #
./safe_mysqld --user=mysql & (คำสั่ง safe_mysqld
อยู่ในไดเรกทอรี /path_to_mysql/bin/)
ซึ่งจะทำให้เกิดการสร้างเดมอนชื่อ mysqld ไว้รอรับการติดต่อที่พอร์ต 3306/TCP ของเครื่อง
การกำหนดออปชัน --user=mysql เป็นการกำหนดชื่อเจ้าของโพรเซสชนิดเดมอนชื่อ
mysqld ที่จะถูกสร้างขึ้น ซึ่งเจ้าของโพรเซสนี้จะต้องได้รับสิทธิ์ในการเข้าใช้งานไฟล์และไดเรกทอรีของฐานข้อมูล
หากไม่กำหนดโพรเซสดังกล่าวจะเป็นของผู้ดูแลระบบ ซึ่งทำให้ความปลอดภัยของระบบลดลง
สิ่งแรกที่ผู้ดูแลระบบต้องดำเนินการคือ การกำหนดรหัสผ่านให้กับผู้ดูแลฐานข้อมูล
(root) ซึ่งผู้ดูแลฐานข้อมูลนี้จะเป็นผู้จัดการทั้งหมดเกี่ยวกับฐานข้อมูล ได้รับสิทธิ์ให้กระทำการใดๆ
ก็ได้กับฐานข้อมูลที่จะมีต่อไป เช่น การสร้างบัญชีชื่อผู้ใช้รายอื่นๆ การสร้างฐานข้อมูลใหม่
และการให้สิทธิ์การใช้งานฐานข้อมูลแก่ผู้ใช้ เป็นต้น เนื่องจากโปรแกรม MySQL ไม่ได้กำหนดค่าดีฟอลต์ของรหัสผ่านของผู้ดูแลฐานข้อมูล
นั่นคือ หลังจากที่ติดตั้งโปรแกรม MySQL แล้ว ทันที่ที่สั่งให้โปรแกรม MySQL เริ่มทำงาน
ใครก็ได้สามารถติดต่อใช้งานฐานข้อมูลมายังเดมอน mysqld ที่รอรับการติดต่อด้วยสิทธิ์ของผู้ดูแลฐานข้อมูลได้ทันทีโดยไม่ต้องใช้รหัสผ่าน
การกำหนดรหัสผ่านของผู้ดูแลฐานข้อมูลทำได้โดยใช้คำสั่ง
# ./mysqladmin -u root -h [hostname] -p password 'password ที่ต้องการ'
(คำสั่ง mysqladmin อยู่ในไดเรกทอรี /path_to_mysql/bin/)
หลังจากนั้นเมื่อผู้ดูแลฐานข้อมูลเข้าใช้งานฐานข้อมูล จะได้รับข้อความให้ใส่ค่ารหัสผ่านทุกครั้งที่ใช้งานใดๆ
เช่น หากผู้ดูแลระบบใช้งานฐานข้อมูลผ่านโปรแกรม mysql จะต้องสั่ง #
./mysql -u root -p และใส่ค่ารหัสผ่าน มิฉะนั้นจะได้รับข้อความเตือนว่า
ERROR 1045: Access denied for user: 'root@localhost'
(Using password: NO) และไม่อนุญาตให้เข้าใช้งาน
ระบบและวิธีการตรวจสอบสิทธิ์ของโปรแกรม MySQL
เนื่องจากโปรแกรม MySQL ให้ความสำคัญกับการจัดการเกี่ยวกับสิทธิ์ของผู้ใช้ค่อนข้างมาก
ผู้ดูแลระบบและ/หรือผู้ดูแลฐานข้อมูลจึงควรมีความเข้าใจเกี่ยวกับระบบการทำงานดังกล่าว
ซึ่งได้นำมาอธิบายไว้ในหัวข้อนี้ ประโยชน์ของระบบการตรวจสอบสิทธิ์ของโปรแกรม MySQL
คือการพิสูจน์ตัวตนผู้ใช้ที่ติดต่อขอใช้งานฐานข้อมูลว่ามาจากเครื่องปลายทางที่ได้รับอนุญาตหรือไม่
และการใช้งานฐานข้อมูลเป็นไปตามสิทธิ์ที่กำหนด เช่น SELECT,
INSERT, UPDATE
และ DELETE หรือไม่ มีจุดประสงค์เพื่อให้ผู้ดูแลระบบมั่นใจว่าผู้ใช้งานทุกคนดำเนินการใดๆ
กับฐานข้อมูลตามที่ได้รับอนุญาตให้ทำเท่านั้น ซึ่งการที่ผู้ใช้งานแต่ละคนจะเข้าใช้งานฐานข้อมูลจะต้องแสดงตัวว่าติดต่อมาจากเครื่องคอมพิวเตอร์เครื่องใดและใช้ชื่อผู้ใช้คนใด
กระบวนการตรวจสอบสิทธิ์ของโปรแกรม MySQL ประกอบด้วยการตรวจสอบ 2 ขั้นตอนเพื่อควบคุมการเข้าถึง
คือ
- เครื่องให้บริการจะตรวจสอบว่าผู้ใช้ได้รับอนุญาตให้ติดต่อกับฐานข้อมูลหรือไม่
- หากได้รับอนุญาต จะตรวจสอบต่อว่าแต่ละคำสั่งที่เรียกใช้งาน เช่น SELECT,
INSERT, UPDATE และ DELETE กับออบเจ็กต์ที่ผู้ใช้ต้องการใช้งาน
เช่น ฐานข้อมูล ตาราง แถวหรือคอลัมน์ เป็นต้น ตรงกับสิทธิ์ที่ผู้ใช้คนดังกล่าวได้รับอนุญาตให้ใช้งานหรือไม่
จะเห็นได้ว่า การใช้งานฐานข้อมูลจะต้องได้รับการตรวจสอบทั้งในระดับผู้ใช้และสิทธิ์การใช้งานของผู้ใช้แต่ละคน
ซึ่งสิทธิ์เหล่านี้ถูกกำหนดโดยผู้ดูแลฐานข้อมูล ดังนั้น การที่ผู้ดูแลฐานข้อมูลจะเพิ่มรายชื่อผู้ใช้งานฐานข้อมูลแต่ละคน
ผู้ดูแลฐานข้อมูลจำเป็นจะต้องกำหนดรายละเอียดเหล่านี้ให้ชัดเจน สามารถทำได้ 2 วิธี
ดังนี้
- ใช้คำสั๋ง GRANT เพื่อกำหนดว่าจะอนุญาตให้ผู้ใช้งานชื่อใดจากเครื่องคอมพิวเตอร์เครื่องใด
ติดต่อเข้ามาใช้งานออบเจ็กต์ใดๆ ในฐานข้อมูลได้บ้าง มีรูปแบบคำสั่งดังนี้
| GRANT priv_type [(column_list)]
[, priv_type [(column_list)] ...] |
| |
ON {tbl_name
| * | *.* | db_name.*} |
| |
TO user_name
[IDENTIFIED BY [PASSWORD] 'password'] |
| |
|
[, user_name
[IDENTIFIED BY 'password'] ...] |
| |
[REQUIRE |
| |
|
[{SSL|
X509}] |
| |
|
[CIPHER
cipher [AND]] |
| |
|
[ISSUER
issuer [AND]] |
| |
|
[SUBJECT
subject]] |
| |
[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR
# |
|
| |
|
|
MAX_UPDATES_PER_HOUR
# | |
| |
|
|
MAX_CONNECTIONS_PER_HOUR
#]] |
GRANT เป็นคำสั่งที่ใช้ในการกำหนดสิทธิ์ของผู้ใช้แต่ละคนที่จะเข้าใช้งานฐานข้อมูล
โดยข้อมูลที่ผู้ขอใช้ต้องแสดงต่อฐานข้อมูลคือ ชื่อผู้ใช้และเครื่องปลายทางของ
หลังจากที่เดมอน mysqld ตรวจสอบข้อมูลทั้งสองแล้วพบว่าผู้ใช้คนดังกล่าวได้รับสิทธิ์ให้ใช้งานฐานข้อมูล
เดมอน mysqld จะเปิดให้ผู้ใช้ส่งคำสั่งต่างๆ มาทำการ SELECT,
INSERT, DELETE หรือ UPDATE ข้อมูลในฐานข้อมูล
ทุกครั้งที่เดมอน mysqld ได้รับคำสั่งใดๆ จากผู้ใช้ก็จะนำคำสั่งนั้นมาเปรียบเทียบกับข้อมูลสิทธิ์ที่ได้กำหนดไว้ว่าผู้ใช้คนดังกล่าว
ได้รับสิทธิ์ในการใช้งานคำสั่งนั้นกับออบเจ็กต์นั้นหรือไม่ คำสั่ง GRANT
จะเป็นตัวกำหนดว่า จะอนุญาตให้ผู้ใช้ (user_name)
ใช้งานฟิลด์ใด (column_list) ของตาราง (tbl_name)
หรือฐานข้อมูลใด (db_name) (อาจอ้างถึงโดยกำหนดเป็น
* เพื่อแทนตารางทั้งหมด) ด้วยคำสั่งใดได้บ้าง (priv_type) ส่วนที่เหลือคือออปชันอื่นๆ
ที่ผู้ดูแลสามารถปรับใช้งานได้ตามต้องการ
หากผู้ดูแลฐานข้อมูลต้องการยกเลิกการให้สิทธิ์ที่ได้กำหนดไปแล้วด้วยคำสั่ง GRANT
สามารถทำได้โดยใช้คำสั่ง REVOKE มีรูปแบบคำสั่งดังนี้
| REVOKE
priv_type [(column_list)] [, priv_type [(column_list)] ...] |
| |
ON {tbl_name
| * | *.* | db_name.*} |
| |
FROM
user_name [, user_name ...] |
วิธีการนี้เป็นวิธีการที่นิยมใช้งานมากกว่าวิธีการที่สองซึ่งจะกล่าวถึงต่อไป
เนื่องจากมีความชัดเจนและมีโอกาสเกิดข้อผิดพลาดได้น้อยกว่า ผู้ดูแลระบบและ/หรือผู้ดูแลจึงควรทำความเข้าใจ
และนำคำสั่งทั้ง GRANT และ REVOKE
นี้ไปใช้งานเพื่อจัดการกับสิทธิ์ของผู้ใช้งานฐานข้อมูล รายละเอียดเพิ่มเติมเกี่ยวกับคำสั่ง
GRANT และ REVOKE
สามารถศึกษาได้จาก MySQL
Manual | 4.3.1 GRANT and REVOKE Syntax (http://www.mysql.com/doc/G/R/GRANT.html)
- แก้ไขตาราง grant ของโปรแกรม MySQL โดยตรง ทำได้โดยการ INSERT
ข้อมูลและสิทธิ์ของผู้ใช้คนใหม่ลงในตาราง user
ซึ่งผู้ที่จะแก้ไขตารางนี้ได้คือผู้ดูแลฐานข้อมูล (root ของฐานข้อมูล) เท่านั้น
อย่างไรก็ตาม วิธีดังกล่าวนี้มีความยุ่งยากซับซ้อน และต้องอาศัยความรอบคอบของผู้ดูแลฐานข้อมูล
จึงไม่นำมาอธิบายในที่นี้ หากต้องการทราบวิธีการสามารถศึกษาได้ที่ MySQL
Manual | 4.3.5 Adding New Users to MySQL (http://www.mysql.com/doc/A/d/Adding_users.html)
ไฟล์ล็อกของโปรแกรม mysql
โปรแกรม MySQL มีไฟล์ล็อกที่ใช้เก็บบันทึกเหตุการณ์ที่เกิดอยู่หลายไฟล์ ผู้ดูแลระบบและ/หรือผู้ดูแลฐานข้อมูลควรจะมีความเข้าใจเกี่ยวกับไฟล์เหล่านั้น
ว่าไฟล์ใดใช้เก็บค่าล็อกที่มีสาเหตุจากอะไร โดยไฟล์ทั้งหมดถูกเก็บไว้ในไดเรกทอรีที่เก็บไฟล์ฐานข้อมูล
เช่น /path_to_mysql/var เป็นต้น
ไฟล์ล็อกดังกล่าวประกอบด้วย
- ไฟล์ล็อกของ error เก็บบันทึกปัญหาที่เกิดขึ้นขณะเริ่มทำงาน ขณะใช้งาน หรือการหยุดทำงานของเดมอน
mysqld
เดมอน mysqld จะบันทึกข้อผิดพลาดทั้งหมดที่เกิดไว้ และให้สคริปต์ safe_mysqld
ทำหน้าที่ส่งต่อข้อความไปยังไฟล์ชื่อ 'hostname'.err
- ไฟล์ล็อกของ isam เก็บบันทึกการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับตาราง ISAM
ใช้ประโยชน์ในการดีบักโค้ดของ isam
- ไฟล์ล็อกของการ query เก็บบันทึกการสร้างการติดต่อและการเรียกใช้ข้อมูล
ใช้ในกรณีที่ผู้ดูแลระบบต้องการทราบว่ามีการทำงานใดเกิดอะไรขึ้นกับเดมอน mysqld
บ้าง ผู้ดูแลระบบต้องเพิ่มออปชัน --log[=file]
ในการสั่งให้โปรแกรม MySQL เริ่มทำงาน โดยค่าดีฟอลต์คือไฟล์ 'hostname'.log
ข้อมูลที่บันทึกในไฟล์ดังกล่าวประกอบด้วยการติดต่อทั้งหมดและการเรียกใช้ข้อมูลในฐานข้อมูล
เหมาะสำหรับการใช้เพื่อตรวจสอบแหล่งที่มาของข้อมูลที่ผิดพลาดว่ามาจากที่ใดหรือผู้ใช้คนใด
- ไฟล์ล็อกของการ update เก็บบันทึกคำสั่งทั้งหมดที่ถูกใช้งานในส่วนเกี่ยวข้องกับการแก้ไขข้อมูลในฐานข้อมูล
หากผู้ดูแลระบบสั่งให้โปรแกรม MySQL เริ่มทำงานโดยเพิ่มออปชัน
--log-update[=file_name] จะทำให้เดมอน mysqld เก็บบันทึกคำสั่งภาษา SQL
ทั้งหมดที่ถูกเรียกใช้งานในการอัพเดตข้อมูล ค่าดีฟอลต์ของไฟล์ที่เก็บล็อกคือ
'hostname'.###
- ไฟล์ล็อกของ binary เก็บบันทึกคำสั่งทั้งหมดที่ถูกใช้งานที่เกี่ยวข้องกับการเปลี่ยนแปลงแก้ไขค่าใดๆ
ใช้ประโยชน์ในการจำลองเหตุการณ์ทั้งหมดที่เกิดขึ้น
ไฟล์ ล็อกชนิดนี้จะเก็บข้อมูลทั้งหมดที่เก็บในไฟล์ล็อกของการ update ที่กล่าวถึงก่อนหน้านี้ในรูปแบบที่มีประสิทธิภาพมากกว่า
เช่น มีการบันทึกค่าระยะเวลาในการเรียกใช้ข้อมูลในการอัพเดตฐานข้อมูลด้วย จึงขอแนะนำให้ผู้ดูแลระบบเลือกใช้ไฟล์ล็อกแบบนี้แทนไฟล์ล็อกของการ
update ทำได้โดยการเพิ่มออปชัน --log-bin[=file_name]
ในการสั่งให้โปรแกรม MySQL เริ่มทำงาน ค่าดีฟอลต์ของไฟล์ที่เก็บล็อกชนิดนี้คือ
'hostname'-bin
- ไฟล์ล็อกของ slow เก็บบันทึกการเรียกใช้ข้อมูลที่ใช้เวลาในการเรียกใช้มากกว่าค่าที่กำหนดในตัวแปร
long_query_time
การเพิ่มออปชัน --low-slow-queries[=file_name]
ในขณะที่สั่งให้โปรแกรม MySQL เริ่มทำงานเป็นการกำหนดให้มีการบันทึกล็อกชนิดนี้
ค่าดีฟอลต์ของไฟล์ที่เก็บล็อกคือ 'hostname'-slow.log
การจัดการกับไฟล์ล็อกของโปรแกรม MySQL มีวิธีการคล้ายคลึงกับไฟล์ล็อกอื่นๆ ผู้ดูแลระบบจะต้องคอยตรวจสอบขนาดของไฟล์ที่เกิดขึ้น
และหมุนวนไฟล์ที่ใช้เก็บล็อก สำหรับระบบปฏิบัติการ Red Hat Linux หากผู้ดูแลระบบติดตั้งโปรแกรม
MySQL โดยใช้แพ็คเกจชนิด RPM จะทำให้สามารถใช้งานสคริปต์ชื่อ mysql-log-rotate
ในการหมุนวนไฟล์ล็อก
การจัดการเกี่ยวกับเจ้าของไฟล์ที่เกี่ยวข้องกับโปรแกรม MySQL ในระบบปฏิบัติการ
สิ่งสำคัญอีกประการหนึ่งเกี่ยวกับการสร้างความปลอดภัยให้กับโปรแกรม MySQL คือการแก้ไขชื่อเจ้าของไฟล์และไดเรกทอรีที่เกี่ยวข้องกับโปรแกรม
MySQL ซึ่งตามปกติแล้ว ไฟล์และไดเรกทอรีทั้งหมดจะถูกเก็บไว้ในไดเรกทอรี /path_to_mysql/
ตามที่ผู้ดูแลระบบหรือโปรแกรม MySQL กำหนดในขณะติดตั้ง ประกอบด้วยไดเรกทอรีย่อยที่สำคัญดังต่อไปนี้
- / คือไดเรกทอรีที่ติดตั้งโปรแกรม MySQL
ทั้งหมด เช่น /usr/local/mysql ทั้งหมด
- bin (/path_to_mysql/bin) คือไดเรกทอรีเก็บไฟล์คำสั่งที่เกี่ยวข้องกับโปรแกรม
MySQL เช่น mysql, mysqlaccess และ safe_mysqld เป็นต้น
- var (/path_to_mysql/var) คือไดเรกทอรีเก็บไฟล์ของฐานข้อมูลของโปรแกรม
MySQL ทั้งหมด และไฟล์ล็อกของโปรแกรม MySQL
ผู้ดูแลระบบควรปรับแก้ชื่อเจ้าของไฟล์และไดเรกทอรีที่เกี่ยวข้อง รวมถึงสิทธิ์การเข้าใช้งานโปรแกรม
MySQL ดังนี้
| |
drwxr-xr-x |
12 |
root |
mysql |
4096 |
Jul |
20 |
17:48 |
mysql/ |
| |
drwxr-x--- |
2 |
root |
mysql |
4096 |
Jul |
19 |
14:43 |
bin/ |
| |
drwx------ |
4 |
mysql |
mysql |
4096 |
Jul |
20 |
18:32 |
var/ |
จะเห็นได้ว่าไดเรกทอรีที่เก็บไฟล์ของฐานข้อมูล MySQL ถูกกำหนดให้เป็นของผู้ใช้ในระบบชื่อ
mysql และจำกัดสิทธิ์การใช้งานให้เฉพาะผู้ใช้ชื่อ mysql เท่านั้นจึงจะเข้าถึงไฟล์ได้
เพื่อให้ผู้ใช้คนอื่นไม่สามารถดำเนินการใดๆ กับไฟล์เหล่านั้นได้ ยกเว้นผู้ใช้ชื่อ
mysql ซึ่งเป็นเจ้าของเดมอน mysqld เท่านั้น
ข้อควรระวังที่เกี่ยวข้องกับความปลอดภัยของโปรแกรม MySQL
การใช้งานโปรแกรม MySQL ให้มีความปลอดภัยนั้น ผู้ดูแลจะต้องพิจารณาถึงวิธีการที่ผู้ใช้หรือผู้อื่นๆ
จะเข้าถึงข้อมูลต่างๆ ในฐานข้อมูล และจำกัดสิทธิ์การใช้งานของผู้ที่จะเข้าใช้งานให้ได้รับสิทธิ์ให้น้อยที่สุดเท่าที่จะเป็นไปได้เท่าที่จำเป็นต่อการใช้งานเท่านั้น
มีข้อควรระวังดังต่อไปนี้
- นอกจากผู้ดูแลฐานข้อมูล (root ของโปรแกรม MySQL) ไม่ควรให้ผู้ใช้งานคนอื่นๆ
เข้าถึงตาราง user ของฐานข้อมูล ซึ่งเป็นตารางที่เก็บรายชื่อผู้ใช้และรหัสผ่านที่จะเข้าใช้งานฐานข้อมูล
เนื่องจากผู้ที่เข้าถึงตารางดังกล่าวนี้ในฐานข้อมูลได้จะสามารถอ่านข้อมูลรายชื่อผู้เข้าใช้งานและรหัสผ่านทั้งหมดได้ทันที
โดยไม่จำเป็นต้องถอดรหัส ทั้งนี้ ถึงแม้ว่าไฟล์ของฐานข้อมูลดังกล่าวถูกเก็บในรูปแบบที่ได้รับการเข้ารหัสก็ตาม
- ผู้ดูแลฐานข้อมูลควรศึกษาถึงระบบการให้สิทธิ์การเข้าถึงฐานข้อมูลโดยละเอียด
โดยเฉพาะอย่างยิ่งวิธีการใช้งานคำสั่ง GRANT
และ REVOKE ในการให้สิทธิ์และเพิกถอนสิทธิ์ของผู้ใช้
และไม่ควรให้สิทธิ์แก่ผู้ใช้เกินกว่าความจำเป็น ควรทดสอบว่า
- สามารถใช้งานโดยให้สิทธิ์ของผู้ดูแลฐานข้อมูลโดยไม่ต้องใส่รหัสผ่านได้หรือไม่
โดยสั่ง # ./mysql -u root ถ้าไม่ได้จะต้องปรากฏข้อความตามที่ได้แสดงไว้ในหัวข้อด้านบน
- ตรวจสอบการให้สิทธิ์โดยใช้คำสั่ง SHOW GRANTS
(mysql> SHOW GRANT FOR user@host) ว่าการให้สิทธิ์เป็นไปตามที่ต้องการหรือไม่
- รหัสผ่านที่ใช้งานจะต้องเป็นรหัสผ่านที่ดี และการเก็บค่ารหัสผ่านจะต้องได้รับการเข้ารหัส
- หากอนุญาตให้ผู้ใช้ภายนอกเข้าใช้งานฐานข้อมูลได้ เช่น การใช้งานผ่านเว็บ ซึ่งอนุญาตให้ผู้ใช้ป้อนข้อมูลลงในฐานข้อมูล
ผู้ดูแลระบบจะต้องตรวจสอบโปรแกรมที่ใช้เข้าถึงฐานข้อมูลอย่างละเอียด การใช้งานค่าตัวแปรใดๆ
กับฐานข้อมูลควรได้รับการกำหนดค่าอย่างชัดเจนเพื่อป้องกันการโจมตี เช่น ใช้คำสั่ง
mysql> SELECT * FROM table WHERE ID='234'
ดีกว่า mysql> SELECT * FROM table WHERE ID=234
และต้องทดสอบการใช้งานในกรณีดังต่อไปนี้
- ในกรณีที่ใช้งานผ่านแอพลิเคชันของเว็บ
- ทดลองใส่ค่า ` ' ' และ ` " ' เพื่อทดสอบหาความผิดพลาดที่อาจเกิดขึ้น
- ทดลองแก้ไขค่า URL ที่ใช้งาน โดยใส่ค่า %22 (` " '), %23 (` #
') และ %27 (` ' ')
- ทดลองแก้ไขค่า URL โดยการป้อนค่าตามข้อก่อนหน้านี้แต่ใช้ค่าอักขระแทนตัวเลข
- ทดลองใส่ค่าอักขระ ช่องว่าง หรือสัญลักษณ์พิเศษแทนการใส่ค่าตัวเลขในช่องที่กำหนดให้ใส่เฉพาะตัวเลข
ซึ่งแอพลิเคชันดังกล่าวจะต้องไม่ส่งค่าเข้าไปยังฐานข้อมูล เพื่อความปลอดภัยของฐานข้อมูล
- ตรวจสอบขนาดของข้อมูลก่อนที่จะส่งไปยังฐานข้อมูล เพื่อหลีกเลี่ยงการถูกโจมตีโดยวิธี
Denial of Service (DoS)
- กำหนดชื่อผู้ใช้ฐานข้อมูลที่ใช้งานผ่านแอพลิเคชันให้แตกต่างจากผู้ใช้ที่จะจัดการฐานข้อมูล
และกำหนดให้ได้รับสิทธิ์เท่าที่จำเป็นเท่านั้น
- ในกรณีที่ใช้งานผ่าน PHP
- ยกเลิกการใช้งานฟังก์ชัน addslashes ( ) และ mysql_escape_string
( )
- ถ้ามีการส่งข้อมูลผ่านอินเทอร์เน็ต ข้อมูลที่ส่งจะต้องได้รับการเข้ารหัสทุกครั้ง
โดยอาจนำโพรโตคอล SSL หรือ SSH มาใช้งาน
- ตรวจสอบการส่งข้อมูลโดยใช้คำสั่ง tcpdump และ strings ของระบบปฏิบัติการ เพื่อตรวจสอบว่ามีการส่งข้อมูลที่ไม่ได้รับการเข้ารหัสหรือไม่
โดยสั่ง # tcpdump -l -i eth0 src/dst port 3306
| strings
- ต้องกำหนดให้ผู้ใช้งานฐานข้อมูลทุกคนมีรหัสผ่านในการเข้าใช้งาน ซึ่งผู้ดูแลระบบสามารถกำหนดได้
2 วิธีคือ
- แก้ไขค่าตัวแปร Password ในไฟล์สคริปต์ mysql_install_db
- สั่งอัพเดตค่ารหัสผ่านของผู้ใช้ในฐานข้อมูล โดยใช้คำสั่ง
mysql> UPDATE user SET Password=('new_password')
WHERE user='root'
mysql> FLUSH PRIVILEGES
- เดมอน mysqld จะต้องไม่ทำงานโดยสิทธิ์ของผู้ดูแลระบบ เพื่อให้ไฟล์ของฐานข้อมูลที่จะถูกสร้างขึ้นภายหลังไม่เป็นของเป็นผู้ดูแลระบบ
มิฉะนั้นผู้ใช้งานฐานข้อมูลอาจใช้ความสามารถในการสร้างไฟล์และเปลี่ยนให้ตนเองได้รับสิทธิ์เป็นผู้ดูแลระบบเพื่อบุกรุกระบบได้
วิธีการกำหนดเดมอน mysqld ทำงานโดยใช้สิทธิ์ของผู้ใช้งานระบบคนอื่นทำได้โดยการแก้ไขไฟล์
etc/my.cnf โดยเพิ่มบรรทัด user=mysql
ลงในส่วน [mysqld] หรือสั่งให้โปรแกรม
MySQL เริ่มต้นการทำงาน โดยใช้ออปชัน --user=mysql
ตามที่ได้อธิบายไว้ก่อนหน้านี้
- ตรวจสอบว่าชื่อผู้ใช้ที่เป็นเจ้าของเดมอน mysqld ได้รับสิทธิ์ในการเขียนและอ่านไฟล์ในไดเรกทอรีที่เป็นไฟล์ฐานข้อมูลเท่านั้