티스토리 뷰

MySQL 보안 정책

  • MySQL은 보안 관점에서 계정 단위로 특정 도메인 또는 IP 주소에게만 원격 접속을 허용하게 할 수 있다. 또한, 같은 계정이라도 원격지 별로 패스워드 또한 다르게 부여할 수 있다. MySQL을 처음 설치하면 로컬에서만 접속이 가능하다. 아래와 같이 information_schema.user_privilege 테이블에서 원격 접속 권한을 확인할 수 있다.
mysql> SELECT * FROM information_schema.user_privileges;
+---------------------------------+---------------+-------------------------+--------------+
| GRANTEE                         | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
+---------------------------------+---------------+-------------------------+--------------+
| 'root'@'localhost'              | def           | SELECT                  | YES          |
| 'root'@'localhost'              | def           | INSERT                  | YES          |
| 'root'@'localhost'              | def           | UPDATE                  | YES          |
| 'root'@'localhost'              | def           | DELETE                  | YES          |
| 'root'@'localhost'              | def           | CREATE                  | YES          |
| 'root'@'localhost'              | def           | DROP                    | YES          |
| 'root'@'localhost'              | def           | RELOAD                  | YES          |
| 'root'@'localhost'              | def           | SHUTDOWN                | YES          |
| 'root'@'localhost'              | def           | PROCESS                 | YES          |
| 'root'@'localhost'              | def           | FILE                    | YES          |
| 'root'@'localhost'              | def           | REFERENCES              | YES          |
| 'root'@'localhost'              | def           | INDEX                   | YES          |
| 'root'@'localhost'              | def           | ALTER                   | YES          |
| 'root'@'localhost'              | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost'              | def           | SUPER                   | YES          |
| 'root'@'localhost'              | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost'              | def           | LOCK TABLES             | YES          |
| 'root'@'localhost'              | def           | EXECUTE                 | YES          |
| 'root'@'localhost'              | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost'              | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost'              | def           | CREATE VIEW             | YES          |
| 'root'@'localhost'              | def           | SHOW VIEW               | YES          |
| 'root'@'localhost'              | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost'              | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost'              | def           | CREATE USER             | YES          |
| 'root'@'localhost'              | def           | EVENT                   | YES          |
| 'root'@'localhost'              | def           | TRIGGER                 | YES          |
+---------------------------------+---------------+-------------------------+--------------+

원격 접속 권한 부여

  • 만약 모든 원격 클라이언트에게 접속 허가를 내려주면 아래와 같이 실행한다.
mysql> GRANT ALL PRIVILEGES ON *.* TO '{계정명}'@'%' IDENTIFIED BY '{비밀번호}' WITH GRANT OPTION;
  • 특정 원격 클라이언트에게만 접속 허가를 내려주면 아래와 같이 실행한다. 보안상 가장 적절하기 때문에 이 방법을 추천한다.
mysql> GRANT ALL PRIVILEGES ON *.* TO '{계정명}'@'{IP주소}' IDENTIFIED BY '{비밀번호}' WITH GRANT OPTION;
  • 권한 부여 중 만약 아래와 같은 오류가 발생한다면 mysql_upgrade를 실행 후 다시 권한 부여를 하면 된다.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

$ mysql_upgrade -u root -p
  • 이제 외부에서 HeidiSQL 등의 MySQL 클라이언트 툴로 원격 접속이 가능하다.

참고 글

댓글
댓글쓰기 폼