ให้สิทธิ์ผู้ใช้ MySQL ในการสร้างฐานข้อมูลและอนุญาตให้เข้าถึงฐานข้อมูลเหล่านั้นเท่านั้น


4

เป็นไปได้หรือไม่ที่จะให้สิทธิ์ผู้ใช้ MySQL ในการสร้างฐานข้อมูลใหม่เช่นว่าพวกเขาสามารถเข้าถึงฐานข้อมูลที่พวกเขาสร้างได้อย่างสมบูรณ์ (รวมถึงความสามารถในการ DROP ฐานข้อมูลเหล่านั้น) แต่นอกเหนือจากฐานข้อมูลที่พวกเขาสร้างขึ้นเองพวกเขาไม่ควรมีสิทธิ์ในฐานข้อมูลของผู้ใช้รายอื่น

ไวยากรณ์ CREATE USER / GRANT จะทำให้เกิดอะไรขึ้น

การแก้ไข: (ตามคำตอบของjohnshen64 )

สมมติว่าคุณต้องการให้ผู้ใช้appserverสร้างและเข้าถึงฐานข้อมูลใหม่ได้

  1. ในฐานะรูทสร้างโพรซีเดอร์ที่เก็บไว้ต่อไปนี้:
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;
  1. ให้สิทธิ์ในการดำเนินการตามขั้นตอนนี้ให้กับผู้ใช้appserver :
ให้รันบน CreateAppDB เพื่อ appserver @ localhost;
  1. เข้าสู่ระบบเป็นappserverและดำเนินการตามขั้นตอนนี้ ตัวอย่างเช่นในการสร้างฐานข้อมูลชื่อfoo :
โทร CreateAppDB ('foo');

ผู้ใช้appserverจะมีสิทธิ์อย่างเต็มที่ในfooฐานข้อมูลที่สร้างขึ้นใหม่รวมถึงความสามารถในการวาง แต่จะไม่สามารถเข้าถึงฐานข้อมูลผู้ใช้อื่น ๆ ใน MySQL

คำตอบ:


4

แม้ว่าฉันจะรู้ว่าไม่มีคำสั่ง sql ใน MySQL เพื่อให้คุณทำเช่นนี้ แต่คุณสามารถเขียนโพรซีเดอร์ที่เก็บไว้เพื่อจัดการสิ่งนี้และมอบโพรซีเดอร์ที่เก็บไว้ให้กับผู้ใช้ ภายในโพรซีเดอร์คุณสามารถสร้าง db และให้สิทธิพิเศษทั้งหมดแก่ผู้ใช้


มันใช้งานได้ดีมาก ฉันจะอัปเดตคำถามของฉันพร้อมตัวอย่างโค้ดโดยใช้วิธีการนี้ ขอบคุณ!
ยีน Goykhman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.