개요
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 | 서버의 캐시, 로그 등을 재로드할 수 있는 권한 |
SHUTDOWN | MySQL 서버를 종료할 수 있는 권한 |
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에서의 권한에 대해서 알아보았습니다.