MySQL에서 변수를 활용해 CREATE USER로 사용자 생성하기
MySQL에서는 동적 쿼리(Dynamic Query)를 활용하면 변수에 저장된 값을 그대로 사용해 새로운 사용자를 생성할 수 있습니다. 핵심 흐름은 다음과 같습니다. 먼저 사용자 이름과 비밀번호를 각각 변수에 담고, CONCAT() 함수로 CREATE USER 쿼리 문자열을 조립한 뒤, PREPARE로 구문을 준비하고 EXECUTE로 실행하는 순서입니다.
기본 문법
먼저 사용자 이름과 비밀번호를 담을 변수를 SET 명령으로 선언합니다.
SET @anyVariableName='yourUserName'; SET @anyVariableName1='yourpassword';
이어서 MySQL의 CONCAT() 함수를 사용해 쿼리를 만듭니다.
SET @yourQueryName = CONCAT
('
CREATE USER "',@anyVariableName,'"@"localhost" IDENTIFIED BY "',@anyVariableName1,'" '
);
생성한 쿼리는 PREPARE 구문으로 준비합니다.
PREPARE yourStatementVariableName FROM @yourQueryName;
준비된 구문은 EXECUTE로 실행합니다.
EXECUTE yourStatementVariableName;
작업이 끝나면 DEALLOCATE PREPARE로 구문을 해제합니다.
DEALLOCATE PREPARE yourStatementVariableName;
단계별 실습 예제
위 문법이 실제로 어떻게 동작하는지 전체 과정을 단계별로 확인해 보겠습니다.
1단계 – SET 명령으로 사용자 이름용 변수와 비밀번호용 변수를 하나씩 생성합니다.
사용자 이름 변수를 만드는 쿼리:
mysql> set @UserName:='John Doe'; Query OK, 0 rows affected (0.00 sec)
비밀번호 변수를 만드는 쿼리:
mysql> set @Password:='John Doe 123456'; Query OK, 0 rows affected (0.00 sec)
2단계 – CONCAT() 함수로 사용자 생성 쿼리를 작성합니다.
mysql> SET @CreationOfUser = CONCAT('
'> CREATE USER "',@UserName,'"@"localhost" IDENTIFIED BY "',@Password,'" '
'> );
Query OK, 0 rows affected (0.02 sec)
위 쿼리에서는 @UserName 변수와 @Password 변수를 활용해 이름과 비밀번호가 지정된 사용자를 생성했습니다.
3단계 – 앞서 만든 사용자 정의 변수 @CreationOfUser를 이용해 구문을 준비합니다.
mysql> PREPARE st FROM @CreationOfUser; Query OK, 0 rows affected (0.00 sec) Statement prepared
4단계 – 준비된 구문을 실행합니다.
mysql> EXECUTE st; Query OK, 0 rows affected (0.37 sec)
5단계 – “John Doe” 사용자가 mysql.user 테이블에 생성되었는지 확인합니다.
mysql> select user,host from MySQL.user;
실행 결과는 다음과 같습니다.
+------------------+-----------+ | user | host | +------------------+-----------+ | Manish | % | | User2 | % | | mysql.infoschema | % | | mysql.session | % | | mysql.sys | % | | root | % | | @UserName@ | localhost | | Adam Smith | localhost | | John | localhost | | John Doe | localhost | | User1 | localhost | | am | localhost | | hbstudent | localhost | +------------------+-----------+ 13 rows in set (0.00 sec)
결과를 보면 “John Doe”라는 사용자가 정상적으로 생성된 것을 확인할 수 있습니다.
6단계 – 마지막으로 준비된 구문을 해제합니다.
mysql> DEALLOCATE PREPARE st; Query OK, 0 rows affected (0.00 sec)
참고 사항
실무 환경에서는 비밀번호를 일반 텍스트 변수에 오래 두지 않는 것이 좋으며, 강력한 비밀번호 정책을 함께 적용해야 합니다. 또한 MySQL 8.0부터 기본 인증 방식이 caching_sha2_password로 변경되었으므로, 생성한 계정이 애플리케이션이나 클라이언트와 호환되는지도 반드시 확인하는 것이 좋습니다.