프로그램/mysql

mysql 에서 새 계정을 추가했는데, 접속이 안 될 때.

(주)CKBcorp., 2014. 2. 17. 06:00
반응형





음....이거 조금 길다. 
긴데, 어쨌던, 설명해 보자.

상황은 이렇다. ( 사용환경 : Linux CentOS + Mysql DB )

1. 새로 서비스를 만들어야 할 게 있어서
2. Database Name 을 새로 만들고
3. 물론 사용자도 추가해서, 2. 에서 만든 Database Name 만 접근하게 하려고 한다. 괜히 사용 안 할 다른 DBName 까지 접근 권한 줘서 보안 사고의 씨앗을 심을 필요는 없으니까.
4. 근데.... 추가한 DB User 로 디비 접근이 안된다? 
5. 권한도 없다. 분명히 추가해 줬는데.
6. 이상해서 mysql 을 외부에서 접속해 보았다. 
7. 추가한 아이디로 외부에서 접속이 안된다!!!

즉, 왜인지는 몰라도 새로 추가한 아이디가 전혀 안 먹는 거임! 


이런 황당한 경우가...


그래서, 아래와 같은 삽질을 시도해 봤다.


11. 혹시 외부에서 접속 자체가 안되는 거 아닐까?

> mysql console 을 이용해서, 이전에 만들어놨던 외부에서 접속 가능한 아이디로 접속해봤다.

> $ mysql -u 정상작동ID -p암호 -h디비의url

> 정상작동. 정상로그인


12. 혹시 권한 부여한 게 내가 실수한 게 아닐까?

> mysql> grant all privileges on *.* to '생성아이디'@'%' identified by '암호' with grant option;

> mysql> grant all privileges on *.* to '생성아이디'@'localhost' identified by '암호' with grant option;

을 통해 권한 다 줘버리고, 로컬이던 외부던 다 접속할 수 있도록 열어버림. 

> 그래도 새 생성아이디로는 외부던, localhost 던 로그인 안됨.


13. 혹시 내가 grant 구문을 잘못 알고 입력한 게 아닐까?

> mysql 의 user 디비에 쿼리로 직접 사용자를 추가해서, 접속되는지 시험

> mysql > use mysql

> mysql > insert into user ( host, user, password ) values ( '%', '생성아이디', password('설정암호') );

> mysql > insert into user ( host, user, password ) values ( 'localhost', '생성아이디', password('설정암호') );

림.

> 역시나 새 생성아이디로는 외부던, localhost 던 로그인 안됨.


14. 포기 + 멘붕중

15. 인터넷 잉여질로 삽질력 충전

16. 혹시, 추가한 계정이 mysql 메모리에 계정 정보 등이 전달되지 않은 거 아닐까?
> mysql > flush privileges;        -- root 권한 필요.
> 에러메시지 발생. "ERROR 1146 (42502): Table 'mysql.servers' dosen't exist "

인터넷에서 검색해 보니 
"없으면 만들면 될 것 아닌가." 란 답변이 존재 ( https://kb.hivelocity.net/steps-to-resolve-the-error-table-mysql-servers-doesnt-exist/ )


그래서 생성 후 다시 시도 :


16.1.  

 mysql > CREATE TABLE `servers` (

`Server_name` char(64) NOT NULL,

`Host` char(64) NOT NULL,

`Db` char(64) NOT NULL,

`Username` char(64) NOT NULL,

`Password` char(64) NOT NULL,

`Port` int(4) DEFAULT NULL,

`Socket` char(64) DEFAULT NULL,

`Wrapper` char(64) NOT NULL,

`Owner` char(64) NOT NULL,

PRIMARY KEY (`Server_name`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

COMMENT=’MySQL Foreign Servers table’;


16.2. 

mysql > flush privileges;

> Query OK, 0 rows affected (0.00 sec)



16.3. 새로 생성한 아이디로 다시 원격 접속 시도

$ mysql -u 생성아이디 -p암호

> 접속 성공. 



결론 : 왜인지는 모르겠지만, mysql.server 테이블이 없어서 grant 같은 명령이 실행되다 중간에 죽고, 결정적으로 추가된 계정의 정보가 refresh 안 된 것. 

그러므로 수동으로 계정 권한 등을 mysql 서버에 업뎃 ( flush privileges ) 해 줘서, 문제가 해결된 것으로 보인다.



... 오늘의 삽질이 다른 이에게 일용할 양식이 되길...



참고사이트 : 

http://blog.naver.com/PostView.nhn?blogId=blash100&logNo=70041229042&parentCategoryNo=4&viewDate=&currentPage=1&listtype=0&from=postList

http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=user&m_no=23153&cat1=1111&cat2=1205&cat3=1249&lang=k

https://kb.hivelocity.net/steps-to-resolve-the-error-table-mysql-servers-doesnt-exist/





 


반응형