Database/Database 명령어

MySQL MariaDB 계정 관리/권한설정/외부접근

시스파고 2020. 6. 11. 09:00

 

DB에 root 계정을 외부에서 접근하는 것은 보안상 바람직한 방법이 아니므로 새로운 계정을 생성하여 외부에서 접근이 가능하도록 권한설정을 해보겠습니다. root는 현재 localhost에서만 접근이 가능한 상태로 되어 있습니다.

1
2
3
4
5
6
7
8
9
MariaDB [mysql]> select host, user, password from user;
+----------------+------+-------------------------------------------+
| host           | user | password                                  |
+----------------+------+-------------------------------------------+
| localhost      | root | *FE77F6274099B26A5DD565E9898AA22FF1A714BC |
| localhost      |      |                                           |
| mariadb-master |      |                                           |
+----------------+------+-------------------------------------------+
3 rows in set (0.00 sec)
 
cs

 

1. DB 신규 계정 생성 및 삭제

신규 계정을 생성할때 syspago@'%'의 의미는 syspaog는 계정 ID / '%'는 모든 IP로부터 접근이 가능하다는 것이다. 만약에 특정 IP만 접근이 가능하게 하려면 syspago@192.168.10.12의 형식으로 진행하면 된다. 

- create user syspago@'%' identified by 'new-password';

- drop user syspago;

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
MariaDB [mysql]> create user syspago@'%' identified by 'new-password';
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [mysql]> select host, user, password from user;
+----------------+---------+-------------------------------------------+
| host           | user    | password                                  |
+----------------+---------+-------------------------------------------+
| localhost      | root    | *FE77F6274099B26A5DD565E9898AA22FF1A714BC |
| %              | syspago | *FE77F6274099B26A5DD565E9898AA22FF1A714BC |
| localhost      |         |                                           |
| mariadb-master |         |                                           |
+----------------+---------+-------------------------------------------+
4 rows in set (0.00 sec)
 
MariaDB [mysql]> drop user syspago;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [mysql]> select host, user, password from user;
+----------------+------+-------------------------------------------+
| host           | user | password                                  |
+----------------+------+-------------------------------------------+
| localhost      | root | *FE77F6274099B26A5DD565E9898AA22FF1A714BC |
| localhost      |      |                                           |
| mariadb-master |      |                                           |
+----------------+------+-------------------------------------------+
3 rows in set (0.00 sec)
 
cs

 

1.1 생성한 계정 drop이 안될 경우에는 다음과 같은 방법으로 시도해볼 것!

@host의 정보까지 모두 기입하여 진행하면 된다.

1
2
3
4
5
MariaDB [mysql]> drop user syspago;
ERROR 1396 (HY000): Operation DROP USER failed for 'syspago'@'%'
 
MariaDB [mysql]> drop user syspago@192.168.10.12;
Query OK, 0 rows affected (0.00 sec)
cs

 

2. 데이터베이스 사용권한 설정

사용권한 설정에 앞서 간단한 쿼리문의 의미를 파악해보자. 주황색 부분은 환경에 맞게 설정되어지는 부분이다.

 

2.1 권한 추가 : grant all privileges on Database.Table to User@Host;

     Database.Table에 접근할 수 있는 모든권한을 User@Host에 부여한다.

     all privileges => select, insert 등으로 변경 가능

 

현재 syspaog계정의 권한 설정값을 확인하고 새로운 권한을 부여했다. 그 다음 다시 권한이 제대로 들어갔는지 확인하는 작업이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MariaDB [mysql]> show grants for syspago@'%';
+-------------------------------------+
| Grants for syspago@%                |
+-------------------------------------+
| GRANT USAGE ON *.* TO 'syspago'@'%' |
+-------------------------------------+
1 row in set (0.00 sec)
 
MariaDB [mysql]> grant all privileges on *.* to syspago@'%' identified by 'new-password';
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [mysql]> show grants for syspago@'%';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for syspago@%                                                                                            |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'syspago'@'%' IDENTIFIED BY PASSWORD '*FE77F6274099B26A5DD565E9898AA22FF1A714BC' |
+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
cs

 

2.2 권한 제거 : revoke all privileges on Database.Table from User@Host;

      Database.Table에 접근할 수 있는 모든권한을 User@Host에서 제거한다.

1
2
3
4
5
6
7
8
9
10
MariaDB [mysql]> revoke all privileges on *.* from syspago@'%';
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [mysql]> show grants for syspago@'%';
+--------------------------------------------------------------------------------------------------------+
| Grants for syspago@%                                                                                   |
+--------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'syspago'@'%' IDENTIFIED BY PASSWORD '*FE77F6274099B26A5DD565E9898AA22FF1A714BC' |
+--------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
cs