-
MySQL User, Grant 생성하기.Database 2023. 12. 15. 06:40728x90반응형
- 목차
소개.
MySQL 에서 사용자를 생성하는 방식에 대해서 알아보려고 합니다.
가장 간단한 방법은 아래와 같습니다.
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
위 쿼리에서 3가지 정보가 사용되는데요.
1. 사용자 이름
2. 사용자의 접속 IP
3. 사용자의 비밀번호
입니다.
그리고 사용자의 권한에 대한 설정 또한 필요합니다.
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'developer'@'localhost';
위 쿼리의 내용은
"developer 라는 사용자는 localhost IP 에서 mysql Database 의 모든 테이블에 SELECT, INSERT, UPDATE, DELETE"
가 가능하다는 권한입니다.
이어지는 내용에서 사용자의 생성과 권한 설정에 대해서 알아보겠습니다.
사용자 생성하기.
먼저 Docker 를 활용하여 MySQL 컨테이너를 실행시켜보도록 하겠습니다.
< MySQL Container 실행 >
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 mysql:8.0
< MySQL Container Shell 실행 >
docker exec -it mysql sh
< MySQL 접속 >
mysql -u root -p 1234
위 과정을 마치면 MySQL Shell 로 접속할 수 있습니다.
그리고 현재 생성된 MySQL 사용자 목록을 확인해봅시다.
< mysql.user 테이블 조회 >
select user, host from mysql.user;
+------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+ 5 rows in set (0.00 sec)
여기서 "developer", "admin", "testor" 라는 사용자들을 생성해보겠습니다.
< 사용자 생성 >
CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev123'; CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin1234'; CREATE USER 'testor'@'localhost' IDENTIFIED BY 'testor123!';
< 생성된 사용자 조회 >
select user, host from mysql.user;
+------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | admin | localhost | | developer | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | testor | localhost | +------------------+-----------+ 8 rows in set (0.00 sec)
추가된 사용자들을 확인할 수 있습니다.
Grant 부여하기.
새롭게 추가된 사용자는 별다른 권한이 없기 때문에 MySQL 내부에서 할 수 있는게 없습니다.
developer 라는 계정으로 MySQL 에 접속하여 DML, DDL 등의 쿼리를 수행해보도록 하겠습니다.
< developer 계정으로 MySQL 접속 >
mysql -u developer -p dev123
< 데이터베이스 조회 >
show databases;
+--------------------+ | Database | +--------------------+ | information_schema | | performance_schema | +--------------------+
< 데이터베이스 생성 >
create database test;
ERROR 1044 (42000): Access denied for user 'developer'@'localhost' to database 'test'
< 실제 존재하는 테이블 조회 >
select user, host from mysql.user;
ERROR 1142 (42000): SELECT command denied to user 'developer'@'localhost' for table 'user'
위의 테스트처럼 권한이 없는 사용자는 Database 와 Table 이 노출되지 않고,
실제 존재하는 리소스에도 접근할 수 없습니다.
따라서 grant 라는 권한이 필요합니다.
권한을 추가해보겠습니다.
권한을 부여하기 위해선 root 계정으로 재접속이 필요합니다.
mysql -u root -p 1234
< developer 계정에 권한 부여 >
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'developer'@'localhost';
Query OK, 0 rows affected, 1 warning (0.01 sec)
다시 developer 계정으로 접속하게 되면,
< developer 계정으로 MySQL 접속 >
mysql -u developer -p dev123
< 데이터베이스 조회 >
show databases;
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec)
< 실제 존재하는 테이블 조회 >
select user, host from mysql.user;
+------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | admin | localhost | | developer | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | testor | localhost | +------------------+-----------+ 8 rows in set (0.00 sec)
반응형'Database' 카테고리의 다른 글
[MySQL] binlog 는 언제 생성될까 ( binary log ) (0) 2024.02.18 [MySQL] Master Slave 구성해보기 ( Replication , Replica ) (0) 2024.02.16 Database Driver 알아보기 (0) 2023.11.04 MySQL Index 알아보기 (0) 2023.10.30 MySQL Page 알아보기 (0) 2023.10.30