mysql สร้างผู้ใช้หากไม่มีอยู่


96

ฉันมีคำถามเพื่อตรวจสอบรายชื่อผู้ใช้ mysql เพื่อสร้างผู้ใช้ใหม่

IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = '{{ title }}')) = 0 THEN
    CREATE USER '{{ title }}'@'localhost' IDENTIFIED BY '{{ password }}'
END IF;

แต่ฉันได้รับข้อผิดพลาดนี้:

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = 'cms_localhost')) = 0 ' at line 1

คำตอบ:


282

ใน 5.7.6 ขึ้นไปคุณควรจะใช้งานได้ CREATE USER

CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY 'password';

โปรดทราบว่าวิธี 5.7.6 ไม่ได้ให้สิทธิ์ใด ๆ


หากคุณไม่ได้ใช้เวอร์ชันที่มีความสามารถนี้ (บางอย่างต่ำกว่า 5.7.6) คุณสามารถดำเนินการดังต่อไปนี้:

GRANT ALL ON `database`.* TO 'user'@'localhost' IDENTIFIED BY 'password';

สิ่งนี้จะสร้างผู้ใช้หากไม่มีอยู่


หมายเหตุหากคุณใช้ MySQL 8 GRANT ALLเมธอดจะไม่สร้างผู้ใช้


3
จะเปลี่ยนรหัสผ่านหรือไม่หากมีผู้ใช้อยู่และมีรหัสผ่านอื่น
m3z

5
ไม่เป็นไร - ตอบคำถามของตัวเอง - ใช่ - แต่จะไม่แทนที่ผู้ใช้หากโฮสต์แตกต่างกัน
m3z

1
ในทางเทคนิคแล้ว @ m3z หากคุณมีผู้ใช้ที่สามารถล็อกอินบนโฮสต์สองโฮสต์ที่แตกต่างกันพวกเขาไม่ใช่ผู้ใช้คนเดียวกัน พวกเขาสามารถมีสิทธิ์ที่แตกต่างกันรหัสผ่านที่แตกต่างกันและทุกอย่าง
Ascherer

1
ใช่ @roundar แต่นั่นทำให้เกิดช่องโหว่ด้านความปลอดภัย ระวัง.
Ascherer

1
มันไม่ปลอดภัยเพียงอย่างเดียวถ้าคุณไม่ระบุรหัสผ่าน @ B166ER ซึ่ง .... duh.
Ascherer

-4

ฉันใช้

SELECT EXISTS (เลือก DISTINCT userFROM mysql. userWHERE user= "username") เป็น is_user

ควรคืนค่า 1 หากมีอยู่หรือ 0 หากไม่มี


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