MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์แบบโอเพ่นซอร์สข้ามแพลตฟอร์ม เป็นฐานข้อมูลที่ประหยัดและราคาไม่แพงที่สุดที่เรามักใช้ เนื่องจากมีขนาดเล็ก ความเร็วที่รวดเร็ว และต้นทุนการเป็นเจ้าของโดยรวมต่ำ โดยเฉพาะอย่างยิ่งคุณลักษณะโอเพ่นซอร์ส เพื่อให้ได้ผลลัพธ์ที่ใช้งานได้จริงที่สุด เป็นเรื่องจริงที่ผู้ใช้จำนวนมากไม่ค่อยมีความรู้เกี่ยวกับหลักการอนุญาตในแอปพลิเคชัน มาวิเคราะห์สำหรับทุกคนกันดีกว่า MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์แบบโอเพ่นซอร์สข้ามแพลตฟอร์ม เป็นฐานข้อมูลที่ประหยัดและราคาไม่แพงที่สุดที่เรามักใช้ เนื่องจากมีขนาดเล็ก ความเร็วที่รวดเร็ว และต้นทุนการเป็นเจ้าของโดยรวมต่ำ โดยเฉพาะอย่างยิ่งคุณลักษณะโอเพ่นซอร์ส เพื่อให้ได้ผลลัพธ์ที่ใช้งานได้จริงที่สุด เป็นเรื่องจริงที่ผู้ใช้จำนวนมากไม่ค่อยมีความรู้เกี่ยวกับหลักการอนุญาตในแอปพลิเคชัน มาวิเคราะห์สำหรับทุกคนกันดีกว่า
สถานการณ์การรีสตาร์ทเซิร์ฟเวอร์
เมื่อ mysqld เริ่มต้น เนื้อหาของตาราง Grant ทั้งหมดจะถูกอ่านในหน่วยความจำและมีผลตั้งแต่นั้นเป็นต้นมา
เมื่อสมัครทันทีโดยเซิร์ฟเวอร์
การแก้ไขตารางการอนุญาตโดยใช้ GRANT, REVOKE หรือ SET PASSWORD จะถูกสังเกตเห็นโดยเซิร์ฟเวอร์ทันที
การแก้ไขแบบฟอร์มการอนุญาตโดยตรง
หากคุณแก้ไขตารางการให้สิทธิ์ด้วยตนเอง (โดยใช้ INSERT, UPDATE ฯลฯ) คุณควรดำเนินการคำสั่ง FLUSH PRIVILEGES หรือเรียกใช้ mysqladmin flush-privileges เพื่อแจ้งให้เซิร์ฟเวอร์โหลดตารางการให้สิทธิ์ใหม่ มิฉะนั้นการเปลี่ยนแปลงของคุณจะไม่มีผลเว้นแต่คุณจะรีสตาร์ท เซิร์ฟเวอร์
ผลกระทบต่อการเชื่อมต่อของลูกค้าที่มีอยู่
เมื่อเซิร์ฟเวอร์สังเกตเห็นว่ามีการเปลี่ยนแปลงตารางการอนุญาต การเชื่อมต่อไคลเอนต์ที่มีอยู่จะมีผลกระทบดังต่อไปนี้:
·การอนุญาตตารางและคอลัมน์จะมีผลกับคำขอถัดไปของลูกค้า
·การเปลี่ยนแปลงการอนุญาตฐานข้อมูลจะมีผลกับคำสั่ง USE db_name ถัดไป
·การเปลี่ยนแปลงการอนุญาตทั่วโลกและการเปลี่ยนแปลงรหัสผ่านจะมีผลในครั้งถัดไปที่ไคลเอนต์เชื่อมต่อ
หลักการมอบหมาย
ไม่ว่าคุณจะระมัดระวังแค่ไหน คุณจะต้องทิ้งช่องโหว่ไว้อย่างหลีกเลี่ยงไม่ได้เมื่อให้สิทธิ์ผู้ใช้ ฉันหวังว่าเนื้อหาต่อไปนี้จะสามารถช่วยคุณได้ โดยทั่วไปคุณควรปฏิบัติตามกฎเหล่านี้
เฉพาะผู้ใช้รูทเท่านั้นที่มีสิทธิ์เขียนตารางการอนุญาตใหม่
อย่าให้สิทธิ์ในการเขียนตารางการอนุญาตใหม่ให้กับผู้ใช้รายอื่นยกเว้นผู้ใช้รูท (แน่นอน หากคุณสามารถใช้ผู้ใช้อื่นเพื่อแทนที่ผู้ใช้รูทเพื่อการจัดการได้ เพื่อเพิ่มความปลอดภัย) ด้วยเหตุนี้ ผู้ใช้สามารถแทนที่สิทธิ์ที่มีอยู่ได้โดยการเขียนทับตารางการอนุญาต สร้างช่องโหว่ด้านความปลอดภัย
โดยปกติแล้วคุณอาจไม่ทำผิดพลาดนี้ แต่หลังจากติดตั้งการแจกจ่ายใหม่แล้ว ตารางการอนุญาตเบื้องต้น ช่องโหว่นี้มีอยู่และคุณอาจทำผิดพลาดได้หากคุณไม่เข้าใจเนื้อหาของแบบฟอร์มการอนุญาตในขณะนี้
บน Unix (Linux) หลังจากติดตั้ง MySQL ตามคำแนะนำในคู่มือแล้ว คุณต้องรันสคริปต์ mysql_install_db เพื่อสร้างฐานข้อมูล mysql รวมถึงตารางการอนุญาตและการอนุญาตเริ่มต้น บน Windows ให้รันโปรแกรมติดตั้งในการแจกจ่ายเพื่อเริ่มต้นไดเร็กทอรีข้อมูลและฐานข้อมูล mysql ถือว่าเซิร์ฟเวอร์กำลังทำงานอยู่ด้วย
เมื่อคุณติดตั้ง MySQL บนเครื่องของคุณเป็นครั้งแรก ตารางการอนุญาตในฐานข้อมูล mysql จะเริ่มต้นได้ดังนี้:
·คุณสามารถเชื่อมต่อในฐานะรูทจาก localhost ได้โดยไม่ต้องระบุรหัสผ่าน ผู้ใช้รูทมีสิทธิ์ทั้งหมด (รวมถึงสิทธิ์ผู้ดูแลระบบ) และสามารถทำอะไรก็ได้ (อย่างไรก็ตาม MySQL superuser และ Unix superuser มีชื่อเดียวกันและไม่เกี่ยวข้องกัน)
·ให้สิทธิ์การเข้าถึงแบบไม่ระบุชื่อแก่ผู้ใช้ที่สามารถเชื่อมต่อภายในเครื่องกับฐานข้อมูลชื่อ test และชื่อฐานข้อมูลใดๆ ที่ขึ้นต้นด้วย test_ ผู้ใช้ที่ไม่ระบุชื่อสามารถทำอะไรกับฐานข้อมูลได้ แต่ไม่มีสิทธิ์ของผู้ดูแลระบบ
โดยทั่วไป ขอแนะนำให้คุณลบบันทึกผู้ใช้ที่ไม่ระบุชื่อ:
mysql> ลบจากผู้ใช้ WHERE User = "";
ก้าวไปอีกขั้นด้วยลบผู้ใช้ที่ไม่ระบุชื่อในตารางการอนุญาตอื่น ๆ ตารางที่มีคอลัมน์ผู้ใช้คือ db, tables_priv และ columns_priv
ตั้งรหัสผ่านสำหรับผู้ใช้รูทด้วย
เกี่ยวกับการตั้งค่าผู้ใช้ รหัสผ่าน และโฮสต์
·ใช้รหัสผ่านสำหรับผู้ใช้ MySQL ทุกคน
โปรดจำไว้ว่า หาก other_user ไม่มีรหัสผ่าน ใครๆ ก็สามารถเข้าสู่ระบบในฐานะคนอื่นๆ ได้ง่ายๆ โดยใช้ mysql -u other_user db_name สำหรับแอปพลิเคชันไคลเอ็นต์/เซิร์ฟเวอร์ เป็นเรื่องปกติที่ไคลเอ็นต์จะระบุชื่อผู้ใช้ใดๆ ก่อนที่คุณจะรัน คุณสามารถเปลี่ยนรหัสผ่านสำหรับผู้ใช้ทั้งหมด หรือเฉพาะรหัสผ่าน root ของ MySQL ได้โดยการแก้ไขสคริปต์ mysql_install_db เช่นนี้:
เปลือก> mysql -u รูท mysql
mysql> อัปเดตรหัสผ่านชุดผู้ใช้ = รหัสผ่าน ('new_password')
-> WHERE ผู้ใช้ = 'root';
mysql> สิทธิ์ล้าง;