존재하지 않는 경우 mysql 사용자 생성


94

새 사용자를 만들기 위해 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

답변:


275

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 2014 년

5
신경 끄시 고 - 예는 않습니다 - - 내 자신의 질문에 대답하지만 호스트가 다른 경우는 사용자를 대체하지 않습니다
m3z가

1
@ m3z는 기술적으로 두 개의 다른 호스트에 로그인 할 수있는 사용자가있는 경우 동일한 사용자가 아닙니다. 다른 권한, 다른 암호 및 모든 것을 가질 수 있습니다.
Ascherer 2014 년

1
예 @roundar이지만 보안 허점을 남깁니다. 주의하십시오.
Ascherer

1
@ B166ER 암호를 지정하지 않으면 안전하지 않습니다.
Ascherer

-3

나는 사용한다

SELECT EXISTS (SELECT DISTINCT userFROM mysql. userWHERE user= "username") as_user로

존재하는 경우 1을 반환하고 그렇지 않은 경우 0을 반환해야합니다.


2
문제는 확인하는 방법이 아니라 생성 방법에 관한 것입니다.
VladL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.