MySQL을 기반으로한 데이터베이스들은 처음 설치하면 기본값으로 외부에서 접속이 불가능하도록 막혀있다. 따라서, 설치한 서버의 localhost 영역에서만 접근이 가능하므로 외부 접근을 풀어줘야 한다. 외부 접근을 관리하는 기준은 User, Database, Client IP 기준으로 관리된다. 따라서 어떤 유저의 접근을 어떤 아이피에서 풀어줄 것인지 세세하게 정의되어야 한다. 접속을 허용하지 않은 클라이언트에서 접속을 시도하면 아래와 같은 에러 메시지가 출력된다.

 

 

[ Error: Unable to connect to MySQL. Debugging errno: 1045 Debugging error: Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: YES) ]

 

 

MySQL에 root 계정으로 로그인 후 mysql.user 테이블을 조회해보면 Host, User 별 접근 권한이 명시되어 있다. 궁극적으로 해당 테이블의 데이터로 접근을 관리하기 때문에 직접 INSERT 구문으로 데이터를 입력해줘도 된다. 하지만 본 포스팅에서는 GRANT 명령어를 통해 데이터를 보다 쉽게 입력하는 방법을 알아 볼 것이다.

 

[ TABLE: mysql.user ]

 

 

 

 

 

# Solution

 

-. 기본 문법

GRANT ALL PRIVILEGES ON dbname.table TO userid@host IDENTIFIED BY 'password' WITH GRANT OPTION;

 

-. 모든 DB의 테이블 접근 권한 설정

GRANT ALL PRIVILEGES ON *.* TO userid@host IDENTIFIED BY 'password' WITH GRANT OPTION;

 

-. 모든 클라이언트 접근 권한 설정

GRANT ALL PRIVILEGES ON dbname.table TO userid@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

 

-. 권한 삭제

REVOKE ALL ON dbname.table from userid@host;

 

-. 권한 조회

SHOW GRANTS FOR userid@host;

 

-. 변경된 권한 적용

FLUST PRIVILEGES;

 

위와 같이 접근 권한에 대한 GRANT 명령어를 사용한 뒤 flush privileges 명령어를 반드시 사용해야 적용된다. 위의 문법을 이용한 예제는 아래와 같다.

 

GRANT ALL PRIVILEGES ON mysql.* TO root@'%' IDENTIFIED BY 'passwd' WUTH GRANT OPTION;

-> mysql 데이터베이스에 속한 모든 테이블root 계정으로 모든 클라이언트에서 접근할 수 있다.

 

Private comment