개요

MYSQL DB를 사용하면서 권한에 대해서 신경 쓸 일이 별로 없었는데 막상 그런 상황이 다가오니 정리가 잘되지 않았습니다. MYSQL에서의 권한에 대해서 이번 포스팅을 통해서 정리해 보고자 합니다.

스키마 권한 vs 전역 권한

MYSQL에서는 권한을 부여할 때 특정 데이터베이스(스키마)에만 적용하거나 전역적으로 권한을 부여할 수 있습니다.

스키마 권한

특정 데이터베이스에서 유저의 권한을 제어하며 좀 더 세밀한 설정을 가능하게 합니다.

1GRANT SELECT, INSERT, UPDATE ON `mydatabase`.* TO 'user1'@'localhost';

위 예시에서는 user1 사용자가 mydatabase 데이터베이스에서 데이터를 조회, 삽입, 수정할 수 있도록 설정합니다.

전역 권한

전역 권한은 모든 데이터베이스에 대해서 유저의 권한을 제어합니다.

1GRANT SELECT, INSERT, UPDATE ON *.* TO 'user1'@'localhost';

위 예시에서는 user1 사용자가 모든 데이터베이스에서 데이터를 조회, 삽입, 수정할 수 있도록 설정합니다.

FLUSH PRIVILEGES

MySQL에서 새로운 사용자를 추가하거나 기존 사용자의 권한을 변경할 때는 변경 사항이 바로 적용되지 않을 수 있습니다. 이러한 변경 사항을 즉시 반영하기 위해 FLUSH PRIVILEGES 명령어를 사용합니다. 이 명령어는 MySQL 서버에 캐시된 사용자 권한 정보를 재로딩하여, 변경된 권한이 즉시 적용되도록 합니다.

1FLUSH PRIVILEGES;

하지만 MYSQL 5.7 이상에서는 대부분의 경우 GRANT나 REVOKE 명령어를 사용하면 FLUSH PRIVILEGES 명령어 없이도 변경 사항이 즉시 적용됩니다. 하지만 일부 환경이나 구버전 MySQL에서는 여전히 FLUSH PRIVILEGES가 필요할 수 있습니다.

권한 확인

유저의 권한을 확인하기 위해서는 다음과 같이 사용합니다.

1SHOW GRANTS FOR 'user1'@'localhost';

위 명령어를 사용하면 user1 사용자가 localhost에서 어떤 권한을 가지고 있는지 확인할 수 있습니다.

권한 제거

1REVOKE INSERT, UPDATE ON `mydatabase`.* FROM 'user1'@'localhost';

위 명령어를 사용하면 user1 사용자가 mydatabase 데이터베이스에서 데이터를 삽입, 수정하는 권한을 제거할 수 있습니다.

권한 종류

MYSQL에서는 다양한 권한을 제공합니다. 위에서 얘기한 것 처럼 권한은 특정 유저에 대해서 전역으로 설정하거나 특정 데이터베이스에 대해서 설정할 수 있습니다. 하지만 특정 권한의 경우에는 전역으로 설정할 수 없는 경우도 있습니다.

아래는 각 권한들을 표로 정리하여 사용법을 정리해보았습니다.

전역 전용 권한

전역 전용 권한은 MYSQL 서버 전체에 적용되며, 서버 관리 작업과 관련된 권한입니다. 주로 데이터베이스 관리자(DBA)에게 부여됩니다.

권한용도
CREATE USER새로운 MySQL 사용자를 생성할 수 있는 권한
FILE서버 파일을 읽고 쓸 수 있는 권한
PROCESS서버의 프로세스를 볼 수 있는 권한
RELOAD서버의 캐시, 로그 등을 재로드할 수 있는 권한
SHUTDOWNMySQL 서버를 종료할 수 있는 권한
SUPER서버 관리 작업을 수행할 수 있는 권한 (예: 서버 변수 변경, 프로세스 중지 등)
REPLICATION SLAVE복제 슬레이브를 설정할 수 있는 권한
REPLICATION CLIENT복제 서버에 연결할 수 있는 권한
SHOW DATABASES모든 데이터베이스의 목록을 볼 수 있는 권한
GRANT OPTION다른 사용자에게 권한을 부여할 수 있는 권한

전역 및 스키마 권한

전역 및 스키마 권한은 MYSQL 서버 전체에 적용될 수도 있고, 특정 데이터베이스에만 적용될 수도 있습니다. 이는 사용자에게 더 세밀한 권한 관리를 가능하게 합니다.

권한용도
SELECT모든 또는 특정 데이터베이스에서 데이터를 조회할 수 있는 권한
INSERT모든 또는 특정 데이터베이스에 데이터를 삽입할 수 있는 권한
UPDATE모든 또는 특정 데이터베이스의 데이터를 수정할 수 있는 권한
DELETE모든 또는 특정 데이터베이스의 데이터를 삭제할 수 있는 권한
CREATE모든 또는 특정 데이터베이스에 새로운 테이블을 생성할 수 있는 권한
ALTER모든 또는 특정 데이터베이스의 테이블 구조를 변경할 수 있는 권한
DROP모든 또는 특정 데이터베이스의 테이블을 삭제할 수 있는 권한
INDEX모든 또는 특정 데이터베이스의 테이블에 인덱스를 생성 및 삭제할 수 있는 권한
LOCK TABLES모든 또는 특정 데이터베이스의 테이블을 잠글 수 있는 권한
REFERENCES모든 또는 특정 데이터베이스에서 외래 키를 만들 수 있는 권한
CREATE VIEW모든 또는 특정 데이터베이스에서 뷰를 생성할 수 있는 권한
SHOW VIEW모든 또는 특정 데이터베이스의 뷰를 볼 수 있는 권한
TRIGGER모든 또는 특정 데이터베이스에서 트리거를 생성할 수 있는 권한
EVENT모든 또는 특정 데이터베이스에서 이벤트를 생성할 수 있는 권한

정리

MYSQL에서는 다양한 권한을 제공하며, 이를 통해 사용자에게 적절한 권한을 부여할 수 있습니다. 이번 포스팅을 통해 MYSQL에서의 권한에 대해서 알아보았습니다.