Real MariaDB (2017년)
데이터베이스 및 사용자 생성 0 0 41,210

by 구루비스터디 MariaDB 데이터베이스 MariaDB 사용자 MariaDB 권한 [2019.08.11]


3.3 데이터베이스 및 사용자 생성

3.3.1 사용자의 식별

  • 다른 DBMS와는 다르게 클라이언트가 실행된 호스트명이나 도메인, IP주소도 계정의 일부가 된다.
  • 예컨데 root 계정으로 접속 시 접속IP에 따라서 패스워드가 맞아도 로그인이 안될 수도 있다는 것이다.


예:

  • 'svc_id'@'127.0.0.1' 으로 계정이 하나만 등록되어 있다면 svc_id는 로컬에서만 접속가능하다.
  • 'svc_id'@'%' 으로 계정이 등록되어 있다면 svc_id는 모든IP에서 접속가능하다.
  • 주의할 것은 위 2개의 계정이 모두 등록되어 있다면 접속 범위가 작은 것인 127.0.0.1이 적용되어 로컬에서만 접속가능하다.


3.3.2 권한

권한범위권한설명
전역CREATE USER사용자 생성
전역FILELOAD DATA INFILE 같은 디스크의 파일 접근 시 필요한 권한
전역PROCESSMariaDB내의 프로세스 조회 권한
전역RELOADFLUSH를 실행할 수 있는 권한
전역SHUTDOWN서버를 종료할 수 있는 권한
전역SUPER특정한 상황에서 제한을 넘어서 뭔가를 할 수 있는 권한
예) read_only 설정 시 데이터 변경 가능
데이터베이스 레벨CREATE새로운 데이터 베이스 생성
데이터베이스 레벨DROP데이터베이스 삭제
데이터베이스 레벨GRANT OPTION데이터베이스의 권한을 다른 사용자에게 부여할 수 있는 권한
데이터베이스 레벨EVENT이벤트 생성 및 삭제
데이터베이스 레벨LOCK TABLE명시적으로 테이블을 잠그는 권한
테이블 레벨ALTER테이블 구조 변경
테이블 레벨CREATE테이블 생성
테이블 레벨DELETE레코드 삭제
테이블 레벨DROP테이블 삭제
테이블 레벨GRANT OPTION테이블에 대한 권한을 다른 사용자에게 부여할 수 있는 권한
테이블 레벨INSERT레코드 입력
테이블 레벨SELECT레코드 조회
테이블 레벨UPDATE레코드 수정
STORED PROGRAMALTER ROUTIN프로시저/함수 등 변경
STORED PROGRAMEXECUTE프로시저/함수 등 실행
STORED PROGRAMGRANT OPTION프로시저/함수 등의 권한을 다른 사용자에게 부여할 수 있는 권한


3.3.1.2 권한의 부여


# 권한만 부여
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 컬럼만 가능하다.


3.3.1.3 권한 그룹


# 권한 그룹(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)


3.3.2 기본 사용자


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)


3.3.3 기본 데이터 베이스


MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |    <-- 메타 데이터가 저장되는 데이터베이스
| mysql              |    <-- 사용자 인증정보, stored program, 이벤트 정보 등이 저장되는 기본 데이터베이스
| performance_schema |    <-- 각종 이벤트, 잠금, 잠금 대기 등의 정보를 기록하는 테이블 구조 저장, 매 기동될때 마다 초기화되며, 데이터는 메모리에 저장
| test               |    <-- 테스트용 데이터베이스(삭제하는 것이 보안상 좋음)
+--------------------+
4 rows in set (0.00 sec)


3.3.4 새로운 데이터베이스 생성 및 삭제


MariaDB [mysql]> create database firstdb;
MariaDB [mysql]> create database firstdb default character set utf8mb4;

MariaDB [mysql]> drop database firstdb;


3.3.5 사용자 생성


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;
* 참고사항 : 사용자 계정과 데이터베이스는 전혀 무관하게 이원화되어 관리되므로, 데이터 베이스는 따로 만들어야 된다.


3.3.6 관리자 계정준비


# 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;


"구루비 데이터베이스 스터디모임" 에서 2017년에 "Real MariaDB" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4183

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입