예:
권한범위 | 권한 | 설명 |
---|---|---|
전역 | CREATE USER | 사용자 생성 |
전역 | FILE | LOAD DATA INFILE 같은 디스크의 파일 접근 시 필요한 권한 |
전역 | PROCESS | MariaDB내의 프로세스 조회 권한 |
전역 | RELOAD | FLUSH를 실행할 수 있는 권한 |
전역 | SHUTDOWN | 서버를 종료할 수 있는 권한 |
전역 | SUPER | 특정한 상황에서 제한을 넘어서 뭔가를 할 수 있는 권한 예) read_only 설정 시 데이터 변경 가능 |
데이터베이스 레벨 | CREATE | 새로운 데이터 베이스 생성 |
데이터베이스 레벨 | DROP | 데이터베이스 삭제 |
데이터베이스 레벨 | GRANT OPTION | 데이터베이스의 권한을 다른 사용자에게 부여할 수 있는 권한 |
데이터베이스 레벨 | EVENT | 이벤트 생성 및 삭제 |
데이터베이스 레벨 | LOCK TABLE | 명시적으로 테이블을 잠그는 권한 |
테이블 레벨 | ALTER | 테이블 구조 변경 |
테이블 레벨 | CREATE | 테이블 생성 |
테이블 레벨 | DELETE | 레코드 삭제 |
테이블 레벨 | DROP | 테이블 삭제 |
테이블 레벨 | GRANT OPTION | 테이블에 대한 권한을 다른 사용자에게 부여할 수 있는 권한 |
테이블 레벨 | INSERT | 레코드 입력 |
테이블 레벨 | SELECT | 레코드 조회 |
테이블 레벨 | UPDATE | 레코드 수정 |
STORED PROGRAM | ALTER ROUTIN | 프로시저/함수 등 변경 |
STORED PROGRAM | EXECUTE | 프로시저/함수 등 실행 |
STORED PROGRAM | GRANT OPTION | 프로시저/함수 등의 권한을 다른 사용자에게 부여할 수 있는 권한 |
# 권한만 부여
MariaDB [(none)]> grant 권한목록 on db.table to 'user'@'host';
# 계정을 생성하고 권한까지 부여
MariaDB [(none)]> grant 권한목록 on db.table to 'user'@'host' identified by 'password' with grant option;
# 글로벌 권한 부여
MariaDB [(none)]> grant super on *.* to 'jigi'@'%';
# 데이터베이스 권한 부여
MariaDB [(none)]> grant event on *.* to 'jigi'@'%';
MariaDB [(none)]> grant event on test.* to 'jigi'@'%';
# 테이블 권한 부여
MariaDB [(none)]> grant select,insert,update,delete on *.* to 'jigi'@'%';
MariaDB [(none)]> grant select,insert,update,delete on test.* to 'jigi'@'%';
MariaDB [(none)]> grant select,insert,update,delete on test.test_table to 'jigi'@'%';
MariaDB [(none)]> grant select,insert,update(uid) on test.test_table to 'jigi'@'%'; <-- update는 uid 컬럼만 가능하다.
# 권한 그룹(role)생성
MariaDB [(none)]> create role dba; <-- 해당 롤을 만든 사용자만 롤 권한 부여가능
MariaDB [(none)]> create role developer with admin jigi; <-- 해당 롤을 만든 사용자와 jigi 계정만 롤 권한 부여가능
MariaDB [(none)]> grant all privileges on *.* to dba; <-- 모든 권한을 dba 롤에 부여
MariaDB [(none)]> grant select,insert,update,delete on test.* to developer; <-- test 데이터베이스의 select, DML 권한만 developer 롤에 부여
# 롤 부여 및 제거
MariaDB [(none)]> set role dba; <-- 롤 부여
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select current_role;
+--------------+
| current_role |
+--------------+
| dba |
+--------------+
1 row in set (0.00 sec)
MariaDB [(none)]> set role developer;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select current_role; <--- 롤은 한 계정에 한 개만 적용된다. (2개 이상 불가능)
+--------------+
| current_role |
+--------------+
| developer |
+--------------+
1 row in set (0.00 sec)
ariaDB [(none)]> set role none;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select current_role; <--- 롤 제거
+--------------+
| current_role |
+--------------+
| NULL |
+--------------+
1 row in set (0.00 sec)
MariaDB [mysql]> select user, host from user;
+-----------+-----------------------+
| user | host |
+-----------+-----------------------+
| dba | |
| developer | |
| jigi | % |
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| root | localhost.localdomain |
+-----------+-----------------------+
7 rows in set (0.00 sec)
MariaDB [mysql]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | <-- 메타 데이터가 저장되는 데이터베이스
| mysql | <-- 사용자 인증정보, stored program, 이벤트 정보 등이 저장되는 기본 데이터베이스
| performance_schema | <-- 각종 이벤트, 잠금, 잠금 대기 등의 정보를 기록하는 테이블 구조 저장, 매 기동될때 마다 초기화되며, 데이터는 메모리에 저장
| test | <-- 테스트용 데이터베이스(삭제하는 것이 보안상 좋음)
+--------------------+
4 rows in set (0.00 sec)
MariaDB [mysql]> create database firstdb;
MariaDB [mysql]> create database firstdb default character set utf8mb4;
MariaDB [mysql]> drop database firstdb;
MariaDB [mysql]> grant show database on *.* to 'abc'@'%' identified by 'test_password';
MariaDB [mysql]> grant select, insert, update, delete on firstdb.* to 'abc'@'%';
MariaDB [mysql]> flush privileges;
* 참고사항 : 사용자 계정과 데이터베이스는 전혀 무관하게 이원화되어 관리되므로, 데이터 베이스는 따로 만들어야 된다.
# root 계정은 너무 많이 알려졌으므로, 로컬만 접속가능한 별도의 관리자계정을 만드는 것을 추천한다.
MariaDB [mysql]> grant all on *.* to 'superman'@'localhost' identified by 'adminpass' with grant option;
MariaDB [mysql]> grant all on *.* to 'superman'@'127.0.0.1' identified by 'adminpass' with grant option;
MariaDB [mysql]> flush privileges;
- 강좌 URL : http://www.gurubee.net/lecture/4183
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.