ส่วนการทำงานดีที่สุดอย่างหนึ่งของ MySQL คือ สนับสนุนระบบสิทธิชั้นสูง
สิทธิ คือ สิทธิในการกระทำกับ อ๊อบเจค เฉพาะ และสัมพันธ์กับผู้ใช้เฉพาะ
เมื่อสร้างผู้ใช้ภายใน MySQL ต้องให้ชุดของสิทธิดีระบุผู้ใช้รายนั้น สามารถทำ หรือไม่สามารถทำภายในระบบ
คำสั่งผู้ใช้ และสิทธิ
ระบบ MySQL สามารถมีหลายผู้ใช้ โดยทั่วไป root ได้รับการใช้เป็น administration โดยเฉพาะด้วยเหตุผลความปลอดภัย แต่ละผู้ใช้ในระบบต้องมีการตั้งค่า บัญชีชื่อและรหัสผ่าน โดยไม่จำเป็นต้องเหมือนกับชื่อผู้ใช้ และรหัสผ่านภายนอกของ MySQL ( ตัวอย่างเช่น ชื่อผู้ใช้และรหัสผ่านของ UNIX หรือ NT) หลักการเดียวกันประยุกต์กับ root แนวคิดที่ดี คือ ควรมีรหัสผ่านต่างกันสำหรับระบบ และ MySQL โดยเฉพาะอย่างยิ่งเมื่อมากับรหัสผ่านของ root
สำหรับวัตถุประสงค์ของการตั้งค่าฐานข้อมูลเว็บ ความคิดที่ดี คือ ตั้งค่าอย่างน้อย 1 ผู้ใช้ต่อ 1 โปรแกรม ประยุกต์เว็บ
หลักการสิทธิน้อยที่สุด
หลักการสิทธิน้อยที่สุด สามารถใช้ปรับปรุงความปลอดภัยของระบบคอมพิวเตอร์ นี่เป็นเรื่องพื้นฐานแต่สำคัญมากที่มักถูกมองข้าม หลักการนี้ คือ ผู้ใช้ ( ผู้ใช้หรือกระบวนการ ) จะต้องมีระดับต่ำที่สุดของสิทธิตามความต้องการเพื่อ กระทำงานตามที่มอบหมาย
การประยุกต์กับ MySQL ทำได้ทุกที่ ตัวอย่างเช่น เรียกใช้ คิวรี่จากเว็บผู้ใช้ไม่ต้องการสิทธิทั้งหมดเหมือนการดึงของ root ดังนั้น ควรสร้างผู้ใช้อีกรายให้มีสิทธิจำเป็นในการเข้าถึงฐานข้อมูลที่สร้างขึ้น
การตั้งค่าผู้ใช้ : คำสั่ง GRANT
คำสั่ง GRANT และ REVOKE ได้รับการใช้เพื่อให้และถอนสิทธิกับผู้ใช้ MySQL ด้วยสิทธิ 4 ระดับ คือ
- Global
- Database
- Table
- Column
คำสั่ง GRANT ใช้สร้างผู้ใช้และให้สิทธิ รูปแบบทั่วไปของคำสั่ง GRANT คือ
GRANT privileges [ column ]
ON item
TO user_name [IDENTIFIED BY ‘ password ' ]
[WITH GRANT OPTION]
คำสั่งในวงเล็บสี่เหลี่ยมเป็นตัวเลือก
- privileges ต้องมีจุลภาคแบ่งรายการสิทธิ
- columns เป็นตัวเลือก สามารถใช้ในการระบุสิทธิกับคอลัมน์ และสามารถใช้ชื่อคอลัมน์เดียว หรือ จุลภาคแบ่งรายการชื่อคอลัมน์
- item คือ ฐานข้อมูล หรือ ตารางข้อมูลในการประยุกต์สิทธิใหม่ การให้สิทธิกับฐานข้อมูลทั้งหมด โดยใช้ *.* ที่ item เรียกว่า การให้สิทธิระดับ global การระบุ ตารางข้อมูลทั้งหมดในฐานข้อมูลใช้ dbname.* หรือ ตารางข้อมูลเดียว ใช้ dbname.tablename และเจาะจงคอลัมน์ใน column สิ่งเหล่านี้แสดง 3 ระดับของสิทธิ คือ ฐานข้อมูล ตารางข้อมูล และคอลัมน์ ถ้ากำลังใช้ฐานข้อมูลที่เจาะจง เมื่อใช้คำสั่ง tablename จะถูกขัดขวางในฐานะตารางข้อมูลในฐานข้อมูลปัจจุบัน
- user_name เป็นชื่อผู้ใช้ที่ต้องการให้เข้าสู่ MySQL ไม่จำเป็นต้องเหมือนกับชื่อเข้าสู่ระบบ user_name ใน MySQL สามารถเก็บชื่อ host ซึ่งสามารถนำไปแยกระหว่าง laura ( ได้รับการแปลเป็น mailto:larea@localhost) และ mailto:[email protected]โดยมีประโยชน์เพราะผู้ใช้จากต่าง domain อาจจะมีชื่อเหมือนกัน รวมถึงการเพิ่มความปลอดภัยเพราะสามารถเจาะจงสถานที่ให้เข้าสู่ระบบ และสามารถให้คนที่มาจากสถานที่เฉพาะให้เข้าถึงตารางข้อมูล หรือฐานข้อมูลเฉพาะได้
- password เป็นรหัสผ่าน ที่ผู้ใช้ผ่านเข้าสู่ระบบ รหัสไม่ควรเดาได้ง่าย ดังนั้นไม่ควรเป็นคำในพจนานุกรม หรือ ชื่อผู้ใช้ ในทางความคิดควรผสมตัวอักษรใหญ่ เล็ก และไม่ใช่พยัญชนะ
ตัวเลือก WITH GRANT OPTION ยอมให้ผู้ใช้ที่ระบุ โอนสิทธิ ให้กับคนอื่น
สิทธิ ได้รับการเก็บใน 4 ตารางข้อมูลระบบในฐานข้อมูล เรียกว่า mysql ตารางข้อมูล 4 ตาราง คือ mysql.user mysql.db mysql.tables_priv และ mysql.column_priv ตารางเหล่านี้สัมพันธ์โดยตรงกับสิทธิ 4 ระดับตามที่กล่าวไปแล้ว ควรแก้ไขสิทธิโดยตรงสามารถทำได้นอกจากคำสั่ง GRANT
ประเภทและระดับของสิทธิ
ประเภทพื้นฐาน 3 ประเภท ของสิทธิใน MySQL คือ สิทธิสำหับผู้ใช้ปกติ สิทธิสำหรับผู้บริหารระบบ และสิทธิสำหรับกรณีพิเศษ ผู้ใช้ทั่วไปสามารถได้รับสิทธิอย่างใดอย่างหนึ่ง แต่ตามปกติมีเหตุผลในการจำกัดประเภทผู้บริหารระบบกับผู้บริหารระบบ ตามหลักการสิทธิน้อยที่สุด
การให้สิทธิกับผู้ใช้เฉพาะกับฐานข้อมูล และตารางข้อมูล ที่ต้องการใช้แต่ไม่ควรให้สิทธิเข้าถึงฐานข้อมูล MySQL ยกเว้นผู้บริหารระบบ เนื่องจากนี่เป็นที่เก็บผู้ใช้ รหัสผ่าน และสิทธิอื่นทั้งหมด
สิทธิ สำหรับผู้ใช้ปกติสัมพันธ์โดยตรงกับประเภทเฉพาะของคำสั่ง SQL และถ้าผู้ใช้ได้รับการยินยอมให้ทำงาน ตารางข้อมูล 8.1 แสดงสิทธิสำหรับผู้ใช้ รายการภายใต้คอลัมน์ การประยุกต์ แสดงอ๊อบเจค ให้กับสิทธิที่สามารถกำหนดได้
ตาราง 8.1 สิทธิของผู้ใช้
|
สิทธิ |
การประยุกต์ |
คำอธิบาย |
|
SELECT |
ตารางข้อมูล , คอลัมน์ |
ยอมให้ผู้ใช้ เลือก เรคคอร์ด จากตารางข้อมูล |
|
INSERT |
ตารางข้อมูล , คอลัมน์ |
ยอมให้ผู้ใช้ เพิ่ม เรคคอร์ด ใหม่เข้าสู่ตารางข้อมูล |
|
UPDATE |
ตารางข้อมูล , คอลัมน์ |
ยอมให้ผู้ใช้ ปรับปรุงในเรคคอร์ดที่มีอยู่ในตารางข้อมูล |
|
DELETE |
ตารางข้อมูล |
ยอมให้ผู้ใช้เพื่อลบเรคคอร์ดในตารางข้อมูล |
|
INDEX |
ตารางข้อมูล |
ยอมให้ผู้ใช้สร้างและลบดัชนีบนตารางข้อมูล |
|
ALTER |
ตารางข้อมูล |
ยอมให้ผู้ใช้ แก้ไขโครงสร้างของตารางข้อมูล ตัวอย่างเช่น การเพิ่มคอลัมน์ เปลี่ยนชื่อคอลัมน์หรือตารางข้อมูล และเปลี่ยนแปลงประเภทข้อมูลของคอลัมน์ |
|
CREATE |
ฐานข้อมูล , ตารางข้อมูล |
ยอมให้ผู้ใช้สร้างฐานข้อมูล หรือตารางข้อมูลใหม่ ถ้าฐานข้อมูล หรือตารางข้อมูล ได้รับการระบุ ในคำสั่ง GRANT ผู้ใช้สามารถทำได้เฉพาะการสร้างฐานข้อมูล หรือตารางข้อมูล ถ้ามีอยู่แล้วต้องลบก่อน |
|
DROP |
ฐานข้อมูล , ตารางข้อมูล |
ยอมให้ผู้ใช้ลบ (DROP) ฐานข้อมูล หรือตารางข้อมูล |
สิทธิส่วนใหญ่ของผู้ใช้ปกติ มีอันตรายน้อยโดยสัมพัทธ์ต่อระบบความปลอดภัย ALTER สามารถใช้ทำงานเกี่ยวกับระบบสิทธิ โดยการเปลี่ยนชื่อตารางข้อมูล แต่จำเป็นมากกับผู้ใช้ ระบบความปลอดภัยต้องมีการเลือกระหว่างการใช้และความปลอดภัย ดังนั้นควรพิจารณาเมื่อมาถึง ALTER แต่ต้องให้สิทธิกับผู้ใช้เสมอ
นอกจากรายการสิทธิในตาราง 8.1 สิทธิ PEFERENCES มีอยู่ แต่ปัจจุบันไม่มีการใช้ และสิทธิ GRANT ได้รับการให้ด้วย WITH GRANT OPTION แทนที่ในรายการสิทธิ
ตาราง 8.2 สิทธิของผู้บริหารระบบ
|
สิทธิ |
คำอธิบาย |
|
RELOAD |
ยอมให้ผู้บริหารระบบ โหลดการให้ใหม่ของสิทธิในตารางข้อมูล ล๊อกของ host และตารางข้อมูล |
|
SHUTDOWN |
ยอมให้ผู้บริหารระบบ ปิด แม่ข่าย MySQL |
|
PROCESS |
ยอมให้ผู้บริหารระบบดูกระบวนการของแม่ข่าย และลบ |
|
FILE |
ยอมให้ข้อมูลได้รับการอ่านเข้าสู่ตารางข้อมูลจากไฟล์ และกลับกัน |
มีความเป็นไปได้ในการให้สิทธิเหล่านี้กับผู้ใช้ไม่ใช่ผู้บริหารระบบ แต่ต้องระวังอย่างมาก ถ้ากำลังพิจารณาทำ ผู้ใช้โดยเฉลี่ยไม่จำเป็นใช้สิทธิ RELOAD SHUTDOWN และ PROCESS
สิทธิ FILE มีความแตกต่างเล็กน้อย เนื่องจากมีประโยชน์สำหรับผู้ใช้ เพราะการโหลดข้อมูลจากไฟล์ สามารถประหยัดเวลาในการป้อนข้อมูลใหม่ แต่ละครั้งเพื่อนำข้อมูลเข้าสู่ฐานข้อมูล อย่างไรก็ตามการโหลดไฟล์สามารถใช้โหลดไฟล์ที่แม่ข่าย MySQL มองเห็น รวมถึงฐานข้อมูลของผู้ใช้อื่น และไฟล์รหัสผ่าน ให้สิทธิด้วยความระวัง หรือให้การโหลดข้อมูลสำหรับผู้ใช้
รวมทั้งมีสิทธิพิเศษ 2 อย่าง และแสดงในตาราง 8.3
ตาราง 8.3 สิทธิพิเศษ
|
สิทธิ |
คำอธิบาย |
|
ALL |
ให้สิทธิทั้งหมดตามรายการในตาราง 8.1 และ 8.2 รวมถึงสามารถเขียนด้วย ALL PREVILEGES แทนที่ ALL |
|
USAGE |
ไม่ให้สิทธิ นี่จะเป็นการสร้างผู้ใช้ และยอมให้เข้ามาได้ แต่ไม่ให้ทำอะไร โดยทั่วไปจึงเพิ่มสิทธิมากขึ้นภายหลัง |
คำสั่ง REVOKE
คำสั่ง REVOKE ตรงข้ามกับ GRANT สำหรับใช้ถอนสิทธิจากผู้ใช้ และมีไวยากรณ์คล้ายกับ GRANT
REVOKE privileges [(column)]
ON item
FROM user_name
ถ้าใช้ WITH GRANT OPTION สามารถใช้ REVOKE ด้วยรูปแบบนี้
REVOKE GRANT OPTION
ON item
FROM user_name
ตัวอย่างการใช้ GRANT และ REVOKE
การกำหนด ผู้บริหารระบบ
mysql > grant all
-> on *
-> to somchai identified by ‘qxz254'
-> with grant option
นี่เป็นการให้สิทธิทั้งหมดกับฐานข้อมูลทั้งหมดไปยังผู้ใช้ ชื่อ somchai ด้วยรหัสผ่าน qxz254 และยอมให้ส่งผ่านสิทธิที่กำหนดให้
การถอนสิทธิทำได้ดังนี้
mysql > revoke all
-> on *
-> from somchai
กำหนดผู้ใช้ที่ไม่มีสิทธิ
mysql > grant usage
-> on widebook.*
-> to somsri identified by ‘magic123'
การเพิ่มสิทธิ
mysql > grant select, insert, update, delete, index, alter, create, drop
-> on widebook.*
-> to somsri
หมายเหตุ การขยายสิทธิให้กับผู้ใช้เดิมไม่จำเป็นต้องระบุหัสผ่าน
ถ้าต้องการถอนสิทธิบางส่วนในการทำงานกับฐานข้อมูล สามารถลดสิทธิด้วยคำสั่งนี้
mysql > revoke alter, create, drop
-> on widebook.*
-> from somsri
ถ้าไม่ต้องการให้ผู้ใช้ทำงานกับฐานข้อมูล สามารถถอนสิทธิทั้งหมดได้
mysql > revoke all
-> on widebook.*
-> from somsri
ที่มา widebase.net โลกกว้างแห่งเทคโนโลยีสารสนเทศ
http://www.widebase.net/database/mysql/mysqltutorial/mysqltutor0203.shtml
