여러가지/DBMS

[MariaDB] 권한

15June 2024. 5. 27. 14:29

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'@'%';