2013-10-09
일단 이 글의 핵심부터 설명 하자면, information_schema는 숨길수가 없다. (제목엔 숨기기라고 되어 있지만.. ^^;)
information_schema는 가상의 데이터 베이스로, information_schema의 테이블들은 모두 뷰테이블들이다. 그래서 사실상 보여지기만 할 뿐 해당 데이터베이스와 테이블들을 건드릴 수가 없다.

뭐, 문제는.. 보여지는 것만으로 해당 데이터베이스의 기본적인 정보가 표시되기 때문인데, 이렇다 하더라도 상관은 없는 모양이다..

그럼 본론으로 들어가서 DB, table, column 들의 권한 설정부터 알아보겠다.

일단 예제를 잔득 써보면,
#DB이름 : temq
#table이름 : testbl
#column이름 : sid, ssid, sort

#column 권한 설정
grant select(sid,ssid), insert(sort) on temq.testbl to test;
grant update(ssid), insert(sort) on temq.testbl to test@localhost;
 
#table 권한 설정
grant select, update on temq.testbl to test@localhost;
grant all privileges on temq.testbl to test@localhost;
 
#DB 권한 설정
grant select, drop on temq.* to test@123.123.1.1;
grant all privileges on temq.* to test; #모든 권한 승인시
대충 감이 오는가? 기본적으로 grant 후에 설정할 권한을 쓰고, on 뒤에 DB이름.table이름 의 형식으로 쓴뒤 user이름@host명 식으로 쓰면 된다.

몇가지 팁이 있다면 "*"지시자는 모든을 나타내는것으로, DB이름.table 의 경우 *.* 식으로 사용하면 모든DB.모든table 이 되어 버린다.
그리고 user이름@host명 을 쓸때 @host명을 쓰지 않으면 자동으로 "%"로 모든 접근 가능으로 들어간다.

그리고 해당 설정이 제대로 들어갔나를 확인하고 싶다면,
select * from columns_priv; #column의 권한 설정 확인
select * from tables_priv; #talbe의 권한 설정 확인
select * from db; #DB의 권한 설정 확인
위와 같이 검색해 보면 된다.

반대로.. 해당 테이블들에 직접 insert나 updte를 하여 권한을 설정해 줄 수도 있다. 다만 grant명령어가 더 쉽고 편하기 때문에.. 사용하는 것일뿐..

그리고 마지막으로 젤 중요한 (빠트리고 왜 안되냐고 하는 경우 많다...ㅡ/.ㅡ;)
flush privileges;
명령어를 쳐주길 바란다. 해당 설정을 적용시키는 것으로, msyql을 다시 시작하지 않고도 해당 설정들이 적용된다.

information_schema를 숨기는 방법을 조사하다가 결국은 숨길수 없다는것을 알고(phpMyAdmin 같은경우는 설정을 통해 숨기는게 가능하기도 하지만... 그래봤자, 접근은 되는데 프로그램상에서 안보여주는거 뿐이고...), 언젠가 정리해놓고 싶었던 접근 권한에 대해서 정리해 보았다.