ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL User, Grant 생성하기.
    Database 2023. 12. 15. 06:40
    728x90
    반응형

     

    - 목차

     

    소개.

    MySQL 에서 사용자를 생성하는 방식에 대해서 알아보려고 합니다.

    가장 간단한 방법은 아래와 같습니다.

    CREATE USER 'username'@'host' IDENTIFIED BY 'password';

     

    위 쿼리에서 3가지 정보가 사용되는데요.

    1. 사용자 이름

    2. 사용자의 접속 IP

    3. 사용자의 비밀번호

    입니다.

     

    그리고 사용자의 권한에 대한 설정 또한 필요합니다.

    GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'developer'@'localhost';

     

    위 쿼리의 내용은

    "developer 라는 사용자는 localhost IP 에서 mysql Database 의 모든 테이블에 SELECT, INSERT, UPDATE, DELETE"

    가 가능하다는 권한입니다.

     

    이어지는 내용에서 사용자의 생성과 권한 설정에 대해서 알아보겠습니다.

     

     

    사용자 생성하기.

    먼저 Docker 를 활용하여 MySQL 컨테이너를 실행시켜보도록 하겠습니다.

     

    < MySQL Container 실행 >

    docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 mysql:8.0

     

    < MySQL Container Shell 실행 >

    docker exec -it mysql sh

     

    < MySQL 접속 >

    mysql -u root -p 1234

     

    위 과정을 마치면 MySQL Shell 로 접속할 수 있습니다.

    그리고 현재 생성된 MySQL 사용자 목록을 확인해봅시다.

     

    < mysql.user 테이블 조회 >

    select user, host from mysql.user;
    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | root             | %         |
    | mysql.infoschema | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    +------------------+-----------+
    5 rows in set (0.00 sec)

     

    여기서 "developer", "admin", "testor" 라는 사용자들을 생성해보겠습니다.

     

    < 사용자 생성 >

    CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev123';
    CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin1234';
    CREATE USER 'testor'@'localhost' IDENTIFIED BY 'testor123!';

     

     

    < 생성된 사용자 조회 >

    select user, host from mysql.user;
    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | root             | %         |
    | admin            | localhost |
    | developer        | localhost |
    | mysql.infoschema | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    | testor           | localhost |
    +------------------+-----------+
    8 rows in set (0.00 sec)

     

    추가된 사용자들을 확인할 수 있습니다.

     

     

     

    Grant 부여하기.

    새롭게 추가된 사용자는 별다른 권한이 없기 때문에 MySQL 내부에서 할 수 있는게 없습니다.

    developer 라는 계정으로 MySQL 에 접속하여 DML, DDL 등의 쿼리를 수행해보도록 하겠습니다.

     

    < developer 계정으로 MySQL 접속 >

    mysql -u developer -p dev123

     

    < 데이터베이스 조회 >

    show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | performance_schema |
    +--------------------+

     

     

    < 데이터베이스 생성 >

    create database test;
    ERROR 1044 (42000): Access denied for user 'developer'@'localhost' to database 'test'

     

     

    < 실제 존재하는 테이블 조회 >

    select user, host from mysql.user;
    ERROR 1142 (42000): SELECT command denied to user 'developer'@'localhost' for table 'user'

     

     

    위의 테스트처럼 권한이 없는 사용자는 Database 와 Table 이 노출되지 않고,

    실제 존재하는 리소스에도 접근할 수 없습니다.

    따라서 grant 라는 권한이 필요합니다.

     

    권한을 추가해보겠습니다.

    권한을 부여하기 위해선 root 계정으로 재접속이 필요합니다.

     

    mysql -u root -p 1234

     

     

    < developer 계정에 권한 부여 >

    GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'developer'@'localhost';

     

    Query OK, 0 rows affected, 1 warning (0.01 sec)

     

    다시 developer 계정으로 접속하게 되면,

     

    < developer 계정으로 MySQL 접속 >

    mysql -u developer -p dev123

     

    < 데이터베이스 조회 >

    show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.00 sec)

     

     

    < 실제 존재하는 테이블 조회 >

    select user, host from mysql.user;

     

    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | root             | %         |
    | admin            | localhost |
    | developer        | localhost |
    | mysql.infoschema | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    | testor           | localhost |
    +------------------+-----------+
    8 rows in set (0.00 sec)

     

    반응형
Designed by Tistory.