[MySQL] 사용자 권한, 역할

kwang-sub·2024년 2월 4일

MySQL 8.0

목록 보기
3/14
post-thumbnail

사용자

사용자 식별

MySQL에서 사용자 계정은 사용자명과 IP주소로 이루어져있다.

'kwang'@'127.0.0.1' -- 로컬 호스트에 kwang라는 계정
'sub'@'%' -- %는 모든 호스트를 의미한다.

만약 사용자명이 같은 전체IP, 상세IP 계정이 있을 경우 상세IP 계정으로 인증을 확인하게 된다.

시스템 계정과 일반 계정

시스템 계정(System Account)은 데이터 베이스 관리자를 위한 계정이며 아래와 같은 작업을 할 수 있다.

  • 계정 관리
  • 다른 세션 또는 그 세션에서 실행 중인 쿼리를 강제 종료
  • 스토어드 프로그램 생성 시 DEFINER를 타 사용자로 설정

일반 계정(Regular Account)은 응용 프로그램이나 개발자를 위한 계정이다.

권한

MySQL에서 권한은 관여하는 범위 또는 동적/정적인지에 따라 구분이 가능하며 아래와 같이 설정할 수 있다.
GRANT 권한명 ON 대상 TO 유저명;
권한명은 , 구분자를 통해 복수로 설정 가능하다.

글로벌 권한
데이터베이스나 테이블 이외의 객체에 적용되는 권한이며 위에 권한 부여 명령어에 대상 부분은 *.*으로만 설정 가능하다.

객체 권한
데이터베이스나 테이블을 제어하는데 필요한 권한이며 위에 권한 부여 명령어에 대상 부분은 DB 권한 또는 테이블 권한에 따라db.* db.table, *.*와 같이 설정 가능하다.
또한 컬럼 단위로도 권한 설정이 가능하지만 관리에 어려움, 성능 저하에 문제로 별도의 뷰를 생성해 해당 뷰에 권한을 방법을 사용하도록 하자.

이러한 권한에 종류는 아래 문서에서 확인 가능하다.
https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html

역할

역할이란 여러 권한을 한데 묶어 사용자에게 부여하는 권한셋이다.
CREATE ROLE 권한명; 와 같은 명령어로 생성 가능하다.

MySQL에서 사용자와 역할은 동일한 객체로 취급된다. 실제로 mysql.user 테이블을 조회해 보면 아래와 같이 사용자와 역할이 같이 조회되는 것을 확인할 수 있다.

따라서 역할에 권한을 부여하고 싶으면 위에 권한 부여 예제에 유저명 대신 역할을 넣으면 역할에 권한을 부여할 수 있다.

GRANT 권한명 ON 대상 TO 역할명;

이렇게 권한이 부여된 역할을 사용자에게 부여하는 방법은 권한 부여방식과 비슷하며 다음과 같이 적용할 수 있다.
GRANT 역할명 TO 사용자명;

profile
백엔드 개발일지

0개의 댓글