mysql yoksa kullanıcı oluştur


95

Yeni kullanıcı oluşturmak için mysql kullanıcı listesini kontrol etmem gereken bir sorgu var.

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

Ama şu hatayı alıyorum:

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

Yanıtlar:


281

5.7.6 ve üzeri sürümlerde, kullanabilmeniz gerekir CREATE USER

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

5.7.6 yönteminin gerçekte herhangi bir izin vermediğini unutmayın.


Bu özelliğe sahip bir sürüm kullanmıyorsanız (5.7.6'nın altında bir şey), aşağıdakileri yapabilirsiniz:

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

Bu, mevcut değilse kullanıcıyı yaratacaktır


MySQL 8 üzerindeyseniz, GRANT ALLyöntemin bir kullanıcı oluşturmayacağını unutmayın.


3
Bu, kullanıcı varsa ve farklı bir parolaya sahipse parolayı değiştirir mi?
m3z

5
Nevermind - kendi sorumu yanıtladı - evet öyle - ama Sunucu farklıysa kullanıcının yerini almaz
m3z

1
@ m3z teknik olarak, iki farklı ana bilgisayarda oturum açabilen kullanıcınız varsa, bunlar aynı kullanıcı değildir. Farklı izinlere, farklı şifrelere ve her şeye sahip olabilirler.
Ascherer

1
Evet @roundar, ancak bu güvenlik açıkları bırakıyor. Farkında olmak.
Ascherer

1
Yalnızca bir parola @ B166ER belirtmezseniz güvensizdir, ki bu .... duh.
Ascherer

-3

kullanırım

İs_user olarak VAROLARI SEÇİN (DISTINCT userFROM mysql. userWHERE user= "kullanıcı adı")

varsa 1, yoksa 0 döndürmelidir


2
soru nasıl kontrol edileceği değil, nasıl yaratılacağı ile ilgili
VladL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.