Spring이나 SpringBoot프로젝트에 Mysql 계정을 연결 시킬 때, 보안적인 측면에서 root 계정을 사용하는 것 보다는 사용자(서브 계정)를 하나 생성하여 필요한 권한만 부여한 뒤 사용하는것이 좋습니다.
사용자를 생성 할때는 CREATE USER 를 사용하여 생성하면 되는데요.
{username} 에는 생성할 사용자의 이름을, {password}에는 사용자의 패스워드를 입력해주시면 됩니다.
'{username}'@ 뒤에 'localhost'가 붙으면 해당 컴퓨터에서만 접근이 가능하다는 뜻이고,
'%' 가 붙으면 모든 클라이언트에서 접근이 가능하다는 뜻입니다.
CREATE USER '{username}'@'localhost' IDENTIFIED BY '{password}'
CREATE USER '{username}'@'%' IDENTIFIED BY '{password}'
저는 username을 demo로 password를 demo1234로 설정하고 모든 클라이언트에서 접근이 가능한 계정을 생성해보도록 하겠습니다.
CREATE USER 'demo'@'%' IDENTIFIED BY 'demo1234';
위 쿼리를 입력한 뒤 왼쪽의 화살표 버튼을 눌러주시면 사용자가 생성이 됩니다.
방금 전 생성한 사용자에게 권한을 부여해보도록 하겠습니다.
권한을 부여할 때는 GRANT 명령어를 사용하면 됩니다.
SB_DEMO라는 DB에 대하여 SELECT, INSERT, UPDATE, DELETE 권한만 주도록 하겠습니다.
GRANT SELECT, INSERT, UPDATE, DELETE ON SB_DEMO.* TO 'demo'@'%';
위 쿼리를 입력한 뒤 왼쪽의 화살표 버튼을 눌러주시면 권한 부여가 됩니다.
방금 전 만들었던 사용자를 DBeaver에 연결해보도록 하겠습니다.
DBeaver에 Docker로 실행한 Mysql 연결하기를 참고 하여 Mysql Connection을 새로 맺어주시면 되는데요.
대신 Username을 demo로, Password를 demo1234로 설정하여 진행해주시면 됩니다.
그럼 아래와 같이 커넥션이 하나 더 생기게 되는데요, localhost는 root 계정으로 접속한 것이기 때문에 SB_DEMO와 sys라는 DB가 모두 나오지만 localhost2는 demo 계정으로 접속한 것이기 때문에 SB_DEMO만 나오는 것을 확인하실 수 있습니다.
localhost2에 오른쪽 마우스를 클릭 하고 SQL 편집기 -> SQL 편집기를 열어 새로운 편집기를 실행해줍니다.
해당 계정은 SELECT, INSERT, UPDATE, DELETE 권한만 있어야 하기 때문에 아래와 같이 CREATE 쿼리를 입력하면 오류가 나게 됩니다.