Contents

Understand_of_MariaDB

MariaDB

mysql, mariaDB를 계속해서 사용하고 있지만, 계정과 데이터베이스 연결 관계 등 정확한 개념과 이해는 하지 않은 채 시간이 흘러가고 있어, 이번에 정리하고 기록합니다.

전체적인 용어와 개념이 틀렸을 수도 있습니다. 제가 이해하기 쉬운 언어와 그림으로 정리하였습니다. 잘못된 부분이 있다면 꼭. 피드백을 부탁드립니다.

진행과정

“계정생성” > “database생성”> “권한부여” > “하이디에서 확인”

과정을 진행해보며 mariaDB의 구조와 흐름을 이해.

MariaDB를 설치한 후 MySQL Client에서 우선 진행.

MariaDB 기본 정보

MariaDB를 설치하고 MySql Client로 접속을 시도하면

비밀번호를 입력하라는 메세지를 볼 수 있다.

이는 프로그램을 설치할 때 root라는 계정의 비밀번호를 생성하는데 그떄 비밀번호를 입력하면 된다.

이 행위는 root라는 admin 계정으로 MariaDB 시스템에 접속하는 과정임을 알아야 한다. 

비밀번호를 입력하면

mariaDB 시스템에 접속하게 된다.

Default database 확인

mariaDB는 설치하게 되면 default로 세팅이 되는데. 데이터베이스를 보자면,

1
show databases;

4개의 데이터 베이스가 생성되어 있다.

여기서 잠깐💡

mariaDB는 ‘작업공간’이라는 개념이 있다.

현재는 mariaDB의 어떤 데이터베이스(작업공간)도 선택되지 않은 상태이다.

아래와 같은 명령어로 테이터베이스(작업공간)으로 접속할 수 있다.

1
use mysql;     /* mysql이라는 데이터베이스(작업공간)을 사용하겠다.*/

잘 변경되었다면, MariaDB [mysql] 과 같이 데이터베이스(작업공간)에 들어와 있는 것을 알 수 있다.

명령어를 입력하는데 내가 의도한 작업공간이 아닌 경우 에러가 날 수 있으니,
내가 의도한 작업공간안에 들어와서 명령어를 입력한다. 는 개념을 가지고 있어야 한다.

Default 생성 계정 확인

또한 계정이 생성되는데 생성되는 계정은 mysql 데이터베이스안에 user라는 테이블에 생성된다.

1
2
3
4
5
/* mysql의 user라는 곳에서 user와 host를 선택한다.*/
select user, host from mysql.user;         

/* 만약 mysql이라는 작업공간으로 접속해 명령어를 입력한다면, */
select user, host from user;

mariaDB라는 시스템에 등록된 계정이 여기에 쌓이게 되는 것이다.

이외의 데이터베이스에는 user라는 테이블도 없다.

참고로 mysql에 default로 생성된 테이블은 아래와 같다.

information_schema는 총 79개의 테이블

sys는 총 101개의 테이블

performance_schema는 총 81개의 테이블이 있다.

즉, mariaDB라는 시스템을 설치하면, 기본적으로 4개의 데이터베이스 생성되고

시스템에 등록되는 계정은 mysql이라는 데이터베이스user라는 테이블에서 관리된다.

그리고 user 테이블에는 기본적으로 5개의 계정이 있고 이들이 어떤 역할을 하는지는 여기서 다루지는 않겠다. (실은 잘 모른다.)

여기까지 MariaDB를 설치하면 생기는 기본적인 세팅에 대하여 살펴보았고,
지금부터 “계정생성” > “database생성”> “권한부여” > “하이디에서 확인”의 과정을 진행.

계정 생성

이제 계정을 생성한다.

처음 mariaDB에 접속하면 “none으로 어떤 데이터베이스도 선택되지 않았음"을 알 수 있다.

어떤 데이터베이스도 선택하지 않고 테스트 계정을 만들어 보면,

1
2
create user 'none_database_user'@'%' identified by '1234';  
/* 어디서든 접속할수있는(%) none_database_user라는 계정을 만들고 비밀번호는 1234 */

그 계정은 위에서 말한 mysql 데이터베이스에 user 테이블에 생성됨을 알 수 있다.

계정 삭제

1
2
3
delete from mysql.user where user='삭제할계정이름';	/* user테이블에서 삭제 */
delete from mysql.db where user='삭제할계정이름';		/* 계정DB에 반영 */
flush privileges;	/* 시스템 반영 */

위에서 설명했듯 mysql 데이터베이스user라는 테이블계정이 생성되는데,
계정을 삭제하는 위치(from)을 구체적으로 명시하지 않으면 정상적으로 동작 하지 않는다.

delete from user where user=‘none_database_user’;
delete from mysql.user where user=‘none_database_user’;

이 둘의 차이를 알아여하며, 내가 작업하고 있는 공간이 어디인지를 계속 생각해야 한다.

권한 부여

계정을 생성하면 기본적으로 information_schema 테이블이 생긴다.

INFORMATION_SCHEMA란 MySQL 서버 내에 존재하는 DB의 메타 정보(테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 DB다. INFORMATION_SCHEMA 데이터베이스 내의 모든 테이블은 읽기 전용이며, 단순히 조회만 가능하다. 즉, 읽기전용(Read-only)으로 사용자가 직접 수정하거나 관여할 수는 없다.

진행해야 할 것은 내가 사용할 데이터 베이스를 만들고 특정 계정에 그 데이터 베이스를 관리하라는 권한을 주어야 한다.

계정은 “human”으로 만들고, 데이터베이스는 “box”로 만들어보겠다.

1
2
3
4
5
/* 계정 생성 */
create user 'human'@'%' identified by '1234';

/* 데이터베이스 생성 */
create database box;

  • 계정 생성 확인
1
select user, host from mysql.user;

  • 데이터베이스 생성 확인
1
show databases;

생성한 human의 초기 권한을 확인해보면,

1
show grants for 'human'@'%';

무슨 말인지 모르겠습니다.

human 계정box 데이터베이스의 모든 권한을 주고

1
2
grant all privileges on box.* to 'human'@'%';
/* 모든(all) 권한을 box데이터베이스하위 모든 곳(box.*)에 human계정에게 부여한다. */

이후 다시 human의 권한을 확인해보면,

나름의 해석

  1. USAGE ON *.* 의 의미는 모든 데이터베이스에 대하여 접근할 수 있다. 정도인 것 같습니다.
  2. box에 모든 권한을 받은 것을 확인

여기까지 진행한 사항을 DB에 반영하기 위해서는

1
flush privileges;

를 입력

하이디(MariaDB GUI 시스템)으로 확인

하이디에서는 계정 별로 할당된 데이터베이스를 보는 시스템임을 알아 두어야 합니다.

프로그램 시작 후 초기 모습

아무런 정보도 보이지 않음.

우선 root 계정에 대하여 확인해보겠습니다.

신규 > 세션이름 변경(root) > 사용자/암호 입력 > 열기

*세션 이름은 아무렇게나 설정해도 됩니다.

위에서 만들었던 “box” 데이터베이스를 비롯, 기본으로 생기는 4개의 데이터베이스를 root계정으로 확인할 수 있음을 알 수 있다.

human 계정으로 접근한다면?

신규 > 세션이름 변경(human) > 사용자/암호 입력 > 열기

*세션 이름은 아무렇게나 설정해도 됩니다.

아까 권한을 준 box 데이터베이스와 default로 생성되는 information_schema 데이터베이스만 접근이 가능한 것을 알 수 있습니다.

위의 상황을 이미지로 표현한다면,

root 계정으로 접속한다면?

human 계정으로 접속한다면?

이와 같이 표현할 수 있습니다.

간단히 정리하자면,

  1. 마리아디비에 등록된 계정마다
  2. 데이터베이스 (접근)권한을 부여하고
  3. 권한에 따라 접근할 수 있는 데이터베이스가 다르다.
  4. 또한 데이터베이스마다 시스템(ex. backend)을 연결하여 개발을 한다.

계정과 데이터베이스의 관계 그리고 데이터베이스를 다른 시스템(ex. backend)에 연결하여서 사용한다고 했을 때,

  • DB 계정과 backend에서 생서한 계정의 차이.

  • DB 계정이 관리할 수 있는 내용와 한계 등을 이해하는데 도움이 되었으면 합니다.