Study/DB

[MySQL] CREATE USER 사용자 추가 및 GRANT 권한 부여

 

CREATE USER 사용법

CREATE USER '<username>'@'<host>' IDENTIFIED BY '<password>'

 

username은 생성할 유저의 이름, host는 접속할 수 있는 호스트를 지정합니다.

로컬 호스트에서만 접속하게 하고 싶다면 localhost로, 외부 접근을 허용하려면 %를 사용할 수 있습니다.

password는 사용자의 비밀번호입니다.

 

유저 생성 및 삭제, 유저 리스트 조회하는 쿼리입니다.

# 유저 생성
CREATE USER 'test'@'localhost' IDENTIFIED BY '1234';

# 외부 접근 허용
CREATE USER 'test'@'%' IDENTIFIED BY '1234';

# 유저 삭제
DROP USER 'test'@'localhost';

# 유저 리스트 조회
SELECT * FROM mysql.user;

CREATE USER 결과 확인
CREATE USER 결과 확인

 

 

 

 

GRANT 사용법

GRANT 명령어를 사용하여 사용자에게 권한을 부여할 수 있습니다.

기본 구조는 다음과 같습니다.

GRANT <권한> ON <database name>.* TO '<username>'@'<host>';

 

권한 부여하는 예시 쿼리입니다.

GRANT ALL PRIVILEGES ON spring_boot.* TO 'test'@'localhost';

test 유저에게 spring_boot 데이터베이스에 대한 모든 권한을 부여한다는 의미입니다.

그래서 권한을 부여하고 계정에 접속하면 spring_boot 데이터베이스만 사용할 수 있습니다.

 

*.* 로 사용하면 모든 데이터베이스에 대한 권한을 부여한다는 의미입니다.

 

명령어 권한 부여

특정 명령어만 사용할 수 있게 권한을 부여할 수도 있습니다.

# spring_boot 데이터베이스에서 SELECT 명령어만 사용 가능
GRANT SELECT ON spring_boot.* TO 'test'@'localhost';

 

그래서 SELECT가 아닌 다른 명령어를 사용하게되면 오류가 발생합니다.

권한이 없는 명령어를 사용했을 때 오류 발생
권한이 없는 명령어를 사용했을 때 오류 발생

INSERT command denied to user 'test'@'localhost' for table 'test'라는 오류가 발생했습니다.

INSERT 명령어는 test 유저에게 권한이 없다는 의미입니다.

 

특정 테이블에 대한 권한 부여

특정 테이블만 접근할 수 있는 권한도 있습니다.

# test 유저에게 spring_boot 데이터베이스의 test 테이블에 대한 모든 권한 부여
GRANT ALL PRIVILEGES ON spring_boot.test TO 'test'@'localhost';

test 테이블에 대한 모든 권한이 부여되었습니다.