MySQL에서 새로운 사용자를 생성하고 데이터베이스에 대한 권한을 부여하는 작업은 데이터베이스 관리의 기본이자 필수 과정입니다. 이 글에서는 데이터베이스 생성부터 사용자 계정 생성, 그리고 SELECT, INSERT, UPDATE, DELETE, EXECUTE 등 다양한 권한을 부여하는 방법까지 단계별로 살펴보겠습니다.
사용자 생성 및 권한 부여 기본 문법
먼저 데이터베이스를 생성하고, 사용자 계정을 만든 뒤 각 작업에 대한 권한을 하나씩 부여하는 기본적인 문법은 다음과 같습니다.
create database yourDatabaseName DEFAULT CHARACTER SET utf8; create user `yourUserName` identified by yourPassword; GRANT SELECT ON yourDatabaseName.* TO `yourUserName`; GRANT INSERT ON yourDatabaseName.* TO `yourUserName`; GRANT UPDATE ON yourDatabaseName.* TO `yourUserName`; GRANT DELETE ON yourDatabaseName.* TO `yourUserName`; GRANT EXECUTE ON yourDatabaseName.* TO `yourUserName`;
각 구문의 의미는 다음과 같습니다.
- create database : UTF8 문자셋을 기본값으로 하는 새 데이터베이스를 생성합니다.
- create user : 지정한 비밀번호로 새로운 사용자 계정을 만듭니다.
- GRANT : 해당 사용자에게 특정 데이터베이스에 대한 조회(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE), 프로시저 실행(EXECUTE) 권한을 순서대로 부여합니다.
실전 예제: 사용자 생성 후 권한 부여하기
이제 실제 쿼리를 실행해 보겠습니다. demo_app이라는 데이터베이스를 생성하고, John_123이라는 사용자에게 여러 권한을 부여하는 예제입니다.
mysql> create database demo_app DEFAULT CHARACTER SET utf8; Query OK, 1 row affected, 1 warning (0.00 sec) mysql> create user `John_123` identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT SELECT ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT INSERT ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT UPDATE ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT DELETE ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT EXECUTE ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec)
모든 명령이 정상적으로 실행되어 Query OK 메시지가 출력되는 것을 확인할 수 있습니다.
부여된 권한 확인하기
생성된 사용자에게 어떤 권한이 부여되었는지 확인하려면 SHOW GRANTS 명령어를 사용합니다.
mysql> show grants for `John_123`;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-----------------------------------------------------------------------------+ | Grants for John_123@% | +-----------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `John_123`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `demo`.* TO `John_123`@`%` | +-----------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
결과 해석
출력 결과를 살펴보면 두 줄의 권한 정보가 표시됩니다.
- GRANT USAGE ON *.* : 모든 데이터베이스에 대해 아무런 실질적 권한이 없다는 의미로, 로그인만 가능한 기본 상태를 나타냅니다.
- GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `demo`.* :
demo데이터베이스의 모든 테이블에 대해 조회, 삽입, 수정, 삭제, 실행 권한이 부여되었음을 보여줍니다.
이처럼 MySQL에서는 CREATE USER와 GRANT 구문만으로도 사용자 계정 관리와 세밀한 권한 제어가 가능합니다. 필요에 따라 개별 권한만 부여하거나, ALL PRIVILEGES를 사용해 전체 권한을 한 번에 부여할 수도 있습니다.