728x90

0. MySQL 콘솔 접속

MySQL에서 사용자를 관리하려면 root@localhost 아이디로 접속해야 합니다.

$ mysql -uroot -p
Enter password: 비밀번호입력
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16465
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

1. MySQL 전체 사용자 목록 보기

MySQL에 설치된 전체 사용자를 보려면 명령어로 직접 확인할 수는 없고 mysql 데이테베이스를 선택해 user 테이블의 레코드를 봐야 합니다.

mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT User, Host from user;
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | ::1       |
|                  | localhost |
| debian-sys-maint | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

MySQL에서 사용자란 “아이디@호스트”의 결합입니다.

여기서 호스트는 MySQL 서버에 접속하는 컴퓨터를 의미합니다. root@localhost 사용자와 root@127.0.0.1 사용자는 서로 다릅니다. localhost와 127.0.0.1 주소는 네트워크상 같은 의미이지만 MySQL은 서로 다른 호스트에서 접속하는 것으로 간주합니다. 이 점은 MySQL의 사용자를 이해하는데 있어 상당히 중요합니다.

Host는 위와 같이 IP 주소이거나 도메인 이름일 수 있습니다. 아니면 % 같은 기호로 모든 호스트를 나타낼 수도 있으며 이 경우 MySQL 서버에 접속할 수 있는 컴퓨터에 제한을 두지 않는다는 의미입니다. 이는 보안상 추천하지 않습니다.

2. 사용자 만들기

test@localhost라는 사용자가 “test” 비밀번호로 접속할 수 있도록 만듭니다.

mysql> CREATE USER test@localhost IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.00 sec)

3. 사용자에게 데이터베이스 권한 부여

test@localhost 사용자에게 test 데이터베이스 안의 모든 테이블(test.*)에 관한 모든 권한을 부여합니다. 특정 데이터베이스 안의 모든 테이블을 나타내려면 * 문자를 사용합니다.

mysql> GRANT ALL PRIVILEGES ON test.* TO test@localhost;
Query OK, 0 rows affected (0.00 sec)

4. 사용자에 부여된 권한 확인

test@localhost 사용자의 모든 권한을 확인합니다.

mysql> SHOW GRANTS FOR test@localhost;
+---------------------------------------------------------------------------------+
| Grants for test@localhost                                                       |
+---------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'localhost' IDENTIFIED BY PASSWORD '*94BDCEBE1908' |
| GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'localhost'                          |
+---------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

5. 사용자에게서 권한 박탈

test@localhost 사용자에게서 test 데이터베이스 안의 모든 테이블에 대해서 모든 권한을 박탈합니다.

mysql> REVOKE ALL PRIVILEGES ON test.* FROM test@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR test@localhost;
+---------------------------------------------------------------------------------+
| Grants for test@localhost                                                       |
+---------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'localhost' IDENTIFIED BY PASSWORD '*94BDCEBE1908' |
+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)

GRANT ALL PRIVILEGES 명령어를 주기 이전으로 test@localhost 사용자는 아직 로그인이 가능합니다.

만약 위의 USAGE 권한까지 박탈하려면 다음과 같이 명령합니다.

mysql> REVOKE USAGE ON *.* FROM test@localhost;
Query OK, 0 rows affected (0.00 sec)

USAGE 권한이 없으면 로그인이 안 됩니다.

다시 USAGE 권한을 주고 싶다면 아래와 같이 명령해야 합니다.

mysql> GRANT USAGE ON *.* TO test@localhost IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.00 sec)

6. 사용자 삭제

test@localhost 사용자를 삭제합니다.

mysql> DROP USER test@localhost;
Query OK, 0 rows affected (0.00 sec)

부가적으로 해당 사용자에게 부여된 권한(GRANTS)까지 모두 삭제됩니다. 별도로 권한을 박탈하는 과정을 거칠 필요가 없습니다.

이상 MySQL 데이터베이스에서 사용자 관리하는 방법을 살펴봤습니다. 사용자 생성, 삭제 그리고 권한 부여, 박탈 이렇게 생각할 수 있습니다.

Posted by 앗뜨거
,