MySQL

Home

MySQL Tutorial
Knowledge Developer Database Internet Resource
การสร้างฐานข้อมูลเว็บ
1.สร้างฐานข้อมูล
2.แนะนำระบบสิทธิของ MySQL
3.การกำหนดผู้ใช้สำหรับเว็บ
4.การใช้ฐานข้อมูลที่ถูกต้อง
5. Identifiers และประเภทข้อมูล
 
MySQL
1. การออกแบบฐานข้อมูลเว็บ
2. การสร้างฐานข้อมูลเว็บ
 

แนะนำระบบสิทธิของ MySQL

ส่วนการทำงานดีที่สุดอย่างหนึ่งของ 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 ( ได้รับการแปลเป็น laura@localhost ) และ laura@somewhere.com โดยมีประโยชน์เพราะผู้ใช้จากต่าง 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

 

  

สงวนลิขสิทธิ (C) widebase