เป็นไปได้หรือไม่ที่จะให้สิทธิ์ผู้ใช้ 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