MySQL에서 사용자 계정은 사용자명과 IP주소로 이루어져있다.
'kwang'@'127.0.0.1' -- 로컬 호스트에 kwang라는 계정
'sub'@'%' -- %는 모든 호스트를 의미한다.
만약 사용자명이 같은 전체IP, 상세IP 계정이 있을 경우 상세IP 계정으로 인증을 확인하게 된다.
시스템 계정(System Account)은 데이터 베이스 관리자를 위한 계정이며 아래와 같은 작업을 할 수 있다.
일반 계정(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 사용자명;