[MariaDB] 권한
1) 종류
ALL PRIVILEGES : 모든 권한 부여
SELECT: 데이터 조회 권한
INSERT: 데이터 삽입 권한
UPDATE: 데이터 수정 권한
DELETE: 데이터 삭제 권한
CREATE: 데이터베이스/테이블 생성 권한
DROP: 데이터베이스/테이블 삭제 권한
ALTER: 테이블 구조 변경 권한
INDEX: 인덱스 생성 권한
CREATE TEMPORARY TABLES: 임시 테이블 생성 권한
ex) GRANT CREATE TEMPORARY TABLES ON `%`.* TO `test`@`%`;
▷ % 모든 데이터베이스
SHOW DATABASES: 데이터베이스 목록 조회 권한
USAGE : 특별한 권한 부여하지 않고 사용자 계정을 생성하거나 갱신할 때 사용
ex) GRANT USAGE ON *.* TO `test`@`%` IDENTIFIED BY PASSWORD '*ED91434DAF5906F8948B59700F4E486177449770'
※ 이는 단순히 사용자가 존재할 수 있도록 하며, 별도의 권한을 부여하지 않습니다.
즉, 기본적으로 연결만 가능하도록 하지만, WITH GRANT OPTION이 포함된 경우 다른 사용자에게 권한을 부여할 수 있는 권한이 추가로 부여됩니다.
RELOAD - 서버의 캐시, 로그 등을 다시 로드할 권한
SHUTDOWN - 서버를 종료할 권한
PROCESS - 서버의 프로세스를 볼 권한
FILE - 파일을 읽고 쓸 수 있는 권한
REFERENCES - 외래 키를 만들 권한
LOCK TABLES - 테이블을 잠글 권한
EXECUTE - 저장 프로시저를 실행할 권한
REPLICATION SLAVE - 슬레이브 서버에서 복제 작업을 할 권한
BINLOG MONITOR - 바이너리 로그를 모니터링할 권한
CREATE VIEW - 뷰를 생성할 권한
SHOW VIEW - 뷰를 볼 권한
CREATE ROUTINE - 저장 프로시저 및 함수를 생성할 권한
ALTER ROUTINE - 저장 프로시저 및 함수를 변경할 권한
EVENT - 이벤트를 생성, 수정, 삭제할 권한
TRIGGER - 트리거를 생성, 삭제할 권한
GRANT OPTION - 다른 사용자에게 권한을 부여할 수 있는 권한
CREATE USER - 사용자를 생성할 권한
ALTER USER - 사용자를 변경할 권한
DROP USER - 사용자를 삭제할 권한
CREATE TABLESPACE - 테이블 스페이스를 생성할 권한
ALTER TABLESPACE - 테이블 스페이스를 변경할 권한
DELETE HISTORY - 이력 데이터를 삭제할 권한
2) 부여
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;
▷ *.* : 모든 데이터베이스/테이블
▷ GRANT OPTION: 다른 사용자에게 권한 부여 권한
※ GRANT OPTION 명령어만 WITH 뒤에 사용할 수 있습니다.
단, REVOKE 명령어에는 사용할 수 없는 권한입니다.
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' WITH GRANT OPTION CASCADE;
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' CASCADE;
▷ CASCADE : 종속된 모든 객체에 적용
● 실습
: select 명령어 권한만 부여한 경우
>> grant select on galera.* to 'galera'@'localhost';
3) 조회
SHOW GRANTS FOR 'test'@'%';
SHOW GRANTS FOR 'test'@'localhost';
SELECT * FROM information_schema.user_privileges
WHERE GRANTEE LIKE "'test'@'%'";
4) 회수
REVOKE ALL PRIVILEGES ON database_name.table_name FROM 'username'@'host';
ex)
REVOKE ALL PRIVILEGES ON *.* FROM 'test'@'localhost';
REVOKE ALL PRIVILEGES ON *.* FROM 'test'@'%' CASCADE;
FLUSH PRIVILEGES;
※ 사용자 혹은 권한을 추가 및 변경하는 경우, 변경 즉시 적용하도록 서버에 명령합니다.
5) 모든 전역 권한 제거
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test'@'%';
※ 특정 테이블에 대해 SELECT 권한을 제거하려면 먼저 해당 권한이 존재해야 합니다.
따라서, 권한을 부여한 후 다시 제거합니다.
GRANT SELECT ON mysql.* TO 'test'@'%';
GRANT SELECT ON mysql.user TO 'test'@'%';
REVOKE SELECT ON mysql.user FROM 'test'@'%';
※ 권한 부여 후 회수하면 USAGE 상태로 변환됩니다.
단, WITH GRANT OPTION 옵션을 포함해서 권한을 부여했을 경우
ex)
GRANT ALL PRIVILEGES ON *.* TO 'safeusr'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON mysql.* TO 'safeusr'@'%' WITH GRANT OPTION;
REVOKE ALL PRIVILEGES ON *.* FROM 'safeusr'@'%';
REVOKE ALL PRIVILEGES ON mysql.* FROM 'safeusr'@'%';
GRANT ALL PRIVILEGES ON mysql.user TO 'safeusr'@'%' WITH GRANT OPTION;
REVOKE ALL PRIVILEGES ON mysql.user FROM 'safeusr'@'%';