MSSQL에서 MySQL 오니 불편한 점이 많네 많아. 단순히 익숙하지 않은 탓인가 싶지만 아무래도 돈 받고 파는 제품일수록 편의성을 더 생각하는 게 아닐까?
아무튼 MySQL은 DROP DATABASE IF EXISTS db_name;
식의 구문을 지원해서 특정 객체가 존재하는지 여부를 판단해 행동하게 프로그램을 짠다. 그런데 사용자 계정 구문 CREATE USER
는 이상하게도 IF EXISTS
를 지원하지 않는다. 그래서 데이터베이스 계정을 자동으로 생성하고 삭제하는 스크립트를 짤 때 고민했는데 의외로 해결법은 쉬웠다. 방법은 크게 두 가지!
mysql.user
테이블 조회하기
SELECT * FROM mysql.user WHERE User = \'my_id\';
이런 식으로 해당 사용자 계정이 있는지 없는지 확인 가능하다. 하지만 MySQL은 IF THEN / END IF
구문을 스크립트에서 쓰지 못하고 루틴(저장 프로시저, 함수 등)에서만 쓸 수 있기 때문에 이런 분기문을 이용하는데 제약이 있다. 그래서 다른 꼼수를 쓰는데
GRANT
구문 이용하기
GRANT
는 원래 사용자에게 특정 권한을 부여하는데 쓰는 기능이다. 그런데 GRANT
는 특이한 행동 양식을 보인다. GRANT
에 명시된 사용자 계정이
- 존재하면, 해당 사용자 계정에 권한을 부여한다.
- 존재하지 않으면, 해당 사용자 계정을 생성한 후 권한을 부여한다.
그래서 이런 식으로 사용자 계정을 만드는데 사용해도 된다.
GRANT ALL PRIVILEGES ON db_name.* TO \'user\'@\'%\' IDENTIFIED BY \'password\' WITH GRANT OPTION;
참고 문헌
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.