MySQL 서버는 하나의 설정 파일을 사용하며 OS 환경에 따라 my.ini, my.cnf 파일을 사용한다.
해당 파일에는 MySQL에서 사용되는 시스템 변수등이 기록되어 있으며
SHOW GLOBAL VARIABLES
명령어를 통해 환경변수에 어떤 값이 설정되어 있는지 확인할 수 있다.

글로별 변수, 세션 변수
MySQL에서는 글로별 변수와 세션 변수가 나뉘어져 있다.
글로별 변수 : MySQL 서버 전체적으로 영향을 미치는 변수이며 서버 가동 중에 유지가 되며 my.ini 파일 또는 my.cnf 파일을 통해 초기값을 세팅한다.
세션 변수 : 현재 커넥션을 맺고있는 상태에 영향을 미치는 변수이며 커넥션이 종료되면 변수는 소멸된다. 글로벌 변수에 있는 세팅값을 가져와서 세팅한다.
글로벌 변수 확인
SHOW GLOBAL VARIABLES ''
세션 변수 확인
SHOW VARIABLES LIKE ''
변수값 변경
VARIABLES 키워드 앞에 Global 키워드 유무에 따라 세션 글로벌 변수, 세션 변수를 확인할 수 있으며 SET GLOBAL 명령어를 통해 글로벌 변수의 세팅값을 변경할 수 있다. 하지만 해당 명령어를 통해 글로벌 변수를 변경해도 세션 변수는 변경되지 않는다
(기존 글로벌 변수의 초기값을 가져와서 사용하기 때문) 변경하고 싶다면 SET SESSION 명령어를 사용해서 변경해야 한다.
추가적으로 SET GLOBAL 변수를 변경해도 서버를 재시작하면 기존 my.inf 설정파일을 읽어서 변수를 세팅하기 때문에 이전에 변경된게 유지가 되지 않는다
해결 방법으로는 my.inf 파일을 변경하거나
SET PERSIST
명령을 사용해서 영구적으로 변경을 할 수 있다.
정적 변수 vs 동적 변수
정적 변수 : 서버가 동작되는 동안 해당 내용을 변경할 수 없다. 변경하기 위해서 my.inf 파일을 변경하고 서버를 재시작해야한다.
동적 변수 : 서버가 동작되는 시점에서 SET 명령어를 사용해서 변경할 수 있다.
시스템 계정, 일반 계정
계정에 System_User 권한이 있는 경우 시스템 계정, 없는 경우 일반계정으로 나뉜다. MySQL 8.0부터 도입되었으며 시스템 계정은 시스템 계정과 일반 계정을 관리할 수 있지만 일반계정은 시스템 계정을 제외하고 일반계정은 관리할 수 있다. 대표적으로 2가지를 할 수 있음
1. 계정 관리(계정 생성 및 삭제, 계정의 권한 부여 및 제거)
2. 다른 세션(커넥션) 또는 그 세션에서 실행 중인 쿼리를 강제 종료
해당 기능이 도입된 이유는 DBA(데이터 베이스 관리자) 계정에서는 SYSTEM_USER 권한을 할당하고 아닌 경우 할당하지 않게 하기 위해서이다.
플러그인과 컴포넌트
플러그인 : MySQL 서버에 기능을 추가하기 위한 확장 모듈이며 서버 내부에 직접 꽂히는 방식이다.
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
위 명령어를 통해 금칙어 패스워드 파일을 다운받아 설정할 수 있다.
대표적인 플러그인으로 InnoDB 등이 있다.
컴포넌트 : MySQL 8.0부터 새롭게 도입된 방식으로 서버 내부에 직접 접근하는 대신 서비스 인터페이스를 통해 통신하는 모듈 구조이다.
INSTALL COMPONENT 'file://component_validate_password';
마찬가지로 위 명령어를 통해 파일을 다운받을 수 있다.
권한 (Privilege)
MySQL에서 권한도 글로벌 권한과 객체 단위의 권한으로 나뉘어 진다.
글로벌 권한 : 특정 객체에 종속되지 않은 권한이며 DB나 테이블 같은 대상이 없고 서버 전체에 적용된다.
GRANT SUPER ON *.* TO 'user'@'%';
오직 ON *.*으로만 권한을 부여할 수 있다.
객체 권한 : DB, 테이블, 컬럼 등 특정 객체에 부여하는 권한이다.
-- DB 단위
GRANT SELECT ON mydb.* TO 'user'@'%';
-- 테이블 단위
GRANT SELECT, INSERT ON mydb.orders TO 'user'@'%';
-- 컬럼 단위
GRANT SELECT(id, name) ON mydb.users TO 'user'@'%';
객체마다 권한을 부여할 수 있다.
역할(ROLE)
권한의 묶음에 이름을 붙인 것으로 MySQL 8.0부터 도입되었다. 만약 계정이 100개이며 계정 마다 따로 권한을 설정해야 한다면 일일히 수작업으로 100개를 입력해서 넣어줘야할 것이다 하지만 해당 권한을 가진 역할을 생성하고 유저에게 할당하기만 하면 쉽게 끝날 것이다.
이때 주의할 점은 MySQL에서 특정 권한을 가진 역할을 생성해서 유저에게 할당해도 해당 유저에 로그인한 후 역할을 활성화해야 해당 역할이 실질적으로 작동할 수 있다.
-- 역할 활성화
SET ROLE '역할네임'
-- 활성화된 역할 확인
SELECT CURRENT_ROLE();
'Dev Book Review > Real MySQL' 카테고리의 다른 글
| [Real MySQL 8.0] 4장 리뷰 (0) | 2026.07.07 |
|---|
