MySQL, MariaDB의 DB, 계정, 권한 생성 및 설정

    MySQL과 MariaDB는 동일한 사람이 만들었기 때문에, 사용법 또한 거의 동일하다. 그래서 이 문법은 MySQL에서 하든 MariaDB에서 하든 모두 동일하게 작동되는 점 참고 하면 좋을 것 같다.


    MySQL(혹은 MariaDB)를 설치하였다면, 제일 처음에 해야 할일은 데이터베이스(Database)를 생성해야 되는 것이다. MySQL의 database의 개념은 Oracle의 tablespace 개념과 동일하며, 테이블들과 View, Function 등을 생성하는 공간이라고 보면 된다.


    데이터베이스를 생성하였다면, 다음으로는 계정을 생성한다. 계정을 생성할 때, 권한을 한번에 지정하여 생성할 수도 있고, 생성하고 난 후 권한을 지정할 수 있는데 여기서는 두가지 방식 모두 해보도록 한다.



    데이터 베이스 생성


    MySQL이 설치 되었다면, 윈도우 메뉴 -> MySQL -> MySQL Client 실행을 선택하거나, CMD 창을 선택 후 아래와 같은 명령어를 실행한다.


    mysql -u root -p


    root 패스워드를 입력하라는 말이 나오면, 설치했을 때의 root 계정 비밀번호를 입력한다. Mysql을 핸들링할 수 있는 콘솔창에 접속을 하였다면, 다음과 같은 명령어로 데이터베이스를 생성한다.


    create database [db명];


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Your MariaDB connection id is 8
    Server version: 10.2.13-MariaDB mariadb.org binary distribution
     
    Copyright (c) 20002018, Oracle, MariaDB Corporation Ab and others.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    MariaDB [(none)]> create database sinabro;
    Query OK, row affected (0.00 sec)
     
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sinabro            |
    | test               |
    +--------------------+
    rows in set (0.00 sec)
     
    MariaDB [(none)]>
    cs

    위 예제는 sinabro라는 데이터베이스를 생성하는 예제이다. 데이터베이스가 정상적으로 설치되었는지 확인하기 위해서 "show databases;" 명령어를 쳐보았고, 결과 화면처럼 sinabro라는 데이터베이스가 생성되어 있는 것을 볼 수 있다.



    사용자 계정 생성


    사용자 계정을 생성하는 방법은 위에 적은 대로 2가지 방식이 있다. 하나는 그냥 노멀하게 생성하는 방식이고, 또 다른 하나는 생성과 동시에 권한을 지정하는 방법이 있다.



    사용자 계정 생성

    1
    2
    3
    4
    MariaDB [(none)]> create user 'test01'@'%' identified by 'test1234';
    Query OK, rows affected (0.00 sec)
     
    MariaDB [(none)]>
    cs

    create user '계정명'@'아이피' identified by '패스워드';


    아이피 부분을 localhost로 지정할 경우, localhost에서만 접속이 가능하고, 원격으로 접속이 필요한 경우 '%'를 줘서 접속을 허용하는 방식이 있다. 아직 권한을 주지 않았기 때문에, sinabro의 데이터베이스에 접근이 불가능하다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    C:\Program Files\MariaDB 10.2\bin>mysql -u test01 -p
    Enter password: ********
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 12
    Server version: 10.2.13-MariaDB mariadb.org binary distribution
     
    Copyright (c) 20002018, Oracle, MariaDB Corporation Ab and others.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    MariaDB [(none)]> use database sinabro;
    ERROR 1044 (42000): Access denied for user 'test01'@'%' to database 'sinabro'
    MariaDB [(none)]>
    cs


    test01 계정으로 변경하여, use sinabro를 하게 되면, Access denied for user라는 에러문구가 뜨면서 데이터베이스에 접근이 안된다. 



    사용자 계정 생성 및 권한주기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    C:\Program Files\MariaDB 10.2\bin>mysql -u root -p
    Enter password: **********
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 28
    Server version: 10.2.13-MariaDB mariadb.org binary distribution
     
    Copyright (c) 20002018, Oracle, MariaDB Corporation Ab and others.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    MariaDB [(none)]> grant all privileges on sinabro.* to 'test02'@'localhost' idetified by 'test1234' with grant option;
    Query OK, rows affected (0.00 sec)
     
    MariaDB [(none)]> quit
    Bye
     
    C:\Program Files\MariaDB 10.2\bin>mysql -u test02 -p
    Enter password: ********
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 29
    Server version: 10.2.13-MariaDB mariadb.org binary distribution
     
    Copyright (c) 20002018, Oracle, MariaDB Corporation Ab and others.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    MariaDB [(none)]> use sinabro;
    Database changed
    MariaDB [sinabro]>
    cs


    권한을 주면서, 계정을 생성할 때에는 create를 사용하지 않고, grant 명령으로 권한과 계정을 동시에 생성하게 된다. 해당 예제는 test02 라는 유저가 localhost로만 접근할 수 있으며, sinabro 데이터 베이스의 권한을 모두(grant all) 받는 경우이다. 권한과 계정등을 생성할 때에는 root(혹은 관리자 계정)로 수행해야 한다.


    해당 예제에서 use sinabro; 라는 명령어를 쳤을 때, ERROR 1044가 나타나지 않고, Database changed 문구가 뜨면서, 정상적으로 DB를 sinabro로 변경한 것을 볼 수 있다.



    사용자 권한 변경


    권한을 한번에 지정하며 계정을 생성할 수 있지만, 당연히 계정을 생성한 이후 권한을 변경할 수도 있다. 참고로 MySQL은 권한들을 묶어서 권한 그룹(DBA, BACKUP)으로 관리하는 것은 제공하지 않고, 개별적인 권한을 부여한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    MariaDB [(none)]> grant all privileges on sinabro.* to test01@'%';
    Query OK, rows affected (0.00 sec)
     
    MariaDB [(none)]> flush privileges;
    Query OK, rows affected (0.00 sec)
     
    MariaDB [(none)]> quit
    Bye
     
    C:\Program Files\MariaDB 10.2\bin>mysql -u test01 -p
    Enter password: ********
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 27
    Server version: 10.2.13-MariaDB mariadb.org binary distribution
     
    Copyright (c) 20002018, Oracle, MariaDB Corporation Ab and others.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    MariaDB [(none)]> use sinabro;
    Database changed
    MariaDB [sinabro]>
    cs


    이 예제는 계정을 생성하였지만, sinabro에 접근이 안되는 계정인 test01에게 sinabro에 대한 권한을 모두(grant all) 주는 사례이다. 권한을 주고 난 후, flush privileges를 입력해야 최종적으로 권한이 적용 된다.


    예제에서는 sinabro의 모든 권한을 부여하였지만, 실제 운영 계정의 권한을 저런식으로 관리하다가는 해커한테 DB가 모두 털릴 수 있으니, 계정별로 꼭 필요한 권한을 만들어서 운영에서 사용하여야 한다.  권한을 지정할 때, SELECT의 권한 주고 싶다면, grant select ~ 식의 필요한 기능만 입력을 해서 리스크를 관리할 수 있다.



    댓글

    Designed by JB FACTORY