EC2와 RDS는 이미 생성되어 있고 보안 그룹 설정을 통해 서로 연결되어 있다고 가정합니다.
해당 글에서는 EC2에서 RDS에 연결하고, 특정 DB만을 사용할 사용자를 어떻게 생성해야 하는지 알아봅니다.
사진과 같이 Amazon Linux 2를 사용하는 경우
sudo yum install mariadb
그 위에 Amazon Linux 2023를 사용하는 경우
sudo dnf install mariadb105
다른 버전은 참고: https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html
mysql --version
mysql -h RDS-엔드포인트 -P 포트 -u 이름 -p
예시
mysql -h RDS.임시.주소.rds.amazonaws.com -P 3306 -u root -p
접속해서 RDS 초기 생성시에 입력한 password 입력.
-- 존재하는 database 확인
show databases;
create database testdb;
testdb
라는 DB를 생성해서 특정 사용자들이 해당 DB에서 작업할 수 있도록 사용자를 만들 것입니다.
MySQL 5.7버전까지는 GRANT 명령으로 권한의 부여와 동시에 계정 생성이 가능했습니다.
하지만 MySQL 8.0 버전 부터는 계정 생성은 CREATE USER
명령으로, 권한 부여는 GRANT
명령으로 구분해서 실행하도록 바뀌었습니다.
CREATE USER 'USER-아이디'@'%' identified with mysql_native_password by 'USER-비밀번호';
GRANT ALL privileges on 접근할-DB.* TO 'CREATE로-만든-USER-아이디'@'%';
'USER-아이디'@'%'
: EC2로 원격으로 접속하기 때문에%
로 설정한다.
with mysql_native_password
: MySQL 5.7버전 까지는 Native Authentication이 기본 인증 방식이다. 하지만 MySQL 8.0 버전부터는 Caching SHA-2 Authentication이 기본 방식으로 변경되었다. 기존 5.7버전의 클라이언트에서 요청을 하면 오류가 발생할 수 있다. 그렇기 때문에 Native Authentication 방식으로 인증하도록 생성해준다.
이 부분과 관련된 문제는 다음글 참고
https://ynzu-dev.tistory.com/entry/MySQL-Authentication-plugin-cachingsha2password-cannot-be-loaded
-- 예시
-- testuser = 계정 ID + 비밀번호,
-- testdb = 접근 권한을 줄 db
create user 'testuser'@'%' identified with mysql_native_password by 'testuser';
GRANT ALL privileges on testdb.* TO 'testuser'@'%';
mysql -h RDS.임시.주소.rds.amazonaws.com -P 3306 -u testuser -p
생성하면서 설정한 password 입력
show databases;
해당 명령어을 입력하면 접근할 수 있는 database만 보인다.