카테고리 없음

MySQL - 사용자가 특정 테이블에만 접근할 수 있도록 설정

phin09 2025. 7. 12. 21:18

분산 시스템 개발을 하다보면 여러 서버가 동일한 DB를 공유하는 상태로 만들 수도 있습니다.

설계에 따라 여러 서버가 각각의 목적에 따라 동일한 DB의 일부 테이블을 조회하거나 데이터를 수정할 수 있는데요,

필요한 정보만 사용할 수 있게끔 서버에 부여한 DB 계정에 권한 설정을 해둘 수 있습니다.

 

mysql> create table table01 (id int unsigned primary key, name varchar(20));
mysql> create table table02 (id int unsigned primary key, classroom varchar(10))

mysql> show tables;
+---------------------+
| Tables_in_common_db |
+---------------------+
| table01             |
| table02             |
+---------------------+
2 rows in set (0.00 sec)

시스템 계정으로 접속한 상태에서 샘플 테이블을 만들고

mysql> create user 'user01'@'%'
    -> require none
    -> account unlock;

이렇게 극악무도하게 날림으로 만든 사용자를 대상으로 (따라했다면 끝나고 삭제)

table01 조회만 가능한 상태로 설정하면

mysql> grant select on common_db.table01 to 'user01'@'%';

 

user01로 접속한 상태에서는

mysql> show tables;
+---------------------+
| Tables_in_common_db |
+---------------------+
| table01             |
+---------------------+
1 row in set (0.00 sec)

mysql> insert into table01 (id, name) values (1, kim);
ERROR 1142 (42000): INSERT command denied to user 'user01'@'localhost' for table 'table01'

mysql> show grants;
+-------------------------------------------------------+
| Grants for user01@%                                   |
+-------------------------------------------------------+
| GRANT USAGE ON *.* TO `user01`@`%`                    |
| GRANT SELECT ON `common_db`.`table01` TO `user01`@`%` |
+-------------------------------------------------------+
2 rows in set (0.00 sec)

이런식으로 table01에 대해 주어진 권한 한정으로만 사용할 수 있습니다.