เป็นไปได้หรือไม่ที่จะให้สิทธิ์ผู้ใช้ MySQL ในการสร้างฐานข้อมูลใหม่เช่นว่าพวกเขาสามารถเข้าถึงฐานข้อมูลที่พวกเขาสร้างได้อย่างสมบูรณ์ (รวมถึงความสามารถในการ DROP ฐานข้อมูลเหล่านั้น) แต่นอกเหนือจากฐานข้อมูลที่พวกเขาสร้างขึ้นเองพวกเขาไม่ควรมีสิทธิ์ในฐานข้อมูลของผู้ใช้รายอื่น
ไวยากรณ์ CREATE USER / GRANT จะทำให้เกิดอะไรขึ้น
การแก้ไข: (ตามคำตอบของjohnshen64 )
สมมติว่าคุณต้องการให้ผู้ใช้appserverสร้างและเข้าถึงฐานข้อมูลใหม่ได้
- ในฐานะรูทสร้างโพรซีเดอร์ที่เก็บไว้ต่อไปนี้:
DROP PROCEDURE หากมี CreateAppDB อยู่; DELIMITER // สร้าง PROCEDURE CreateAppDB ( IN db_name VARCHAR (50)) เริ่ม - สร้างฐานข้อมูล SET @s = CONCAT ('สร้างฐานข้อมูล', db_name); เตรียมความพร้อมจาก @s; ดำเนินการ stmt; DEALLOCATE เตรียม stmt; - ให้สิทธิ์ SET @s = CONCAT ('อนุญาตทั้งหมดบน', db_name, '. * เพื่อ appserver @ localhost'); เตรียมความพร้อมจาก @s; ดำเนินการ stmt; DEALLOCATE เตรียม stmt; END // DELIMERER;
- ให้สิทธิ์ในการดำเนินการตามขั้นตอนนี้ให้กับผู้ใช้appserver :
ให้รันบน CreateAppDB เพื่อ appserver @ localhost;
- เข้าสู่ระบบเป็นappserverและดำเนินการตามขั้นตอนนี้ ตัวอย่างเช่นในการสร้างฐานข้อมูลชื่อfoo :
โทร CreateAppDB ('foo');
ผู้ใช้appserverจะมีสิทธิ์อย่างเต็มที่ในfooฐานข้อมูลที่สร้างขึ้นใหม่รวมถึงความสามารถในการวาง แต่จะไม่สามารถเข้าถึงฐานข้อมูลผู้ใช้อื่น ๆ ใน MySQL