• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

information_schema.tables 와 information_schema.columns에 관해 질문드립니다.

20.12.01 06:18 작성 조회수 196

2

먼저 좋은 강의 늘 감사드립니다. 실무를 해본적은 없고 선생님 강의를 차근차근 따라가고 있는 중인데요, 순차적 메타데이터 목록화시에 information_schema.tables의 역할이 좀 애매한거같아서 여쭤봅니다.

테이블 네임에 관한 정보는 information_schema.columns에도 있더라구요. 그럼 information_schema.schemata에서 db name을 목록화 시킨 후에 바로

select table_name, column_name from information_schema.columns where table_schema='board'

이런식으로 table과 column을 한번에 목록화 시키는것이 더 효율적이지 않나요? 실무에서는 저 과정을 스킵했을때 문제가 되는경우가 있나요? 감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요.

좋은 질문 감사합니다~!

질문이 columns를 통해 테이블 , 컬럼을 한번에 왜 목록화를 시키지 않느냐? 인데 2가지 이유 때문에 테이블 이후 컬럼 목록화를 한다고 볼 수 있습니다.

첫 번째, 탐색에 효과적이지 않습니다.

보통 주 메뉴, 서브 메뉴 이렇게 나누는 이유는 가독성 때문이고 사용자의 편의성을 고려해서 그렇게 제작이 됩니다.

그런데 수십개의 메뉴가 한번에 출력된다면 오히려 가독성이 굉장히 떨어지게 됩니다.

A 메뉴 / B 메뉴 / C 메뉴 중에 내가 원하는건 A 메뉴인데 B와 C 메뉴의 서브 메뉴를 볼 필요가 없다라는 것입니다.

실무 환경에서는 환경마다 다르겠지만 테이블의 수가 굉장히 많은 것이 일반적입니다. 그리고 어떤 경우는 테이블에 수십개의 컬럼이 있는데 불필요하게 이런 것들 또한 출력이 되게 되어 가독성을 굉장히 떨어트려 우리가 원하는 탐색의 효율성을 굉장히 떨어트릴수 있습니다.

두 번째, SQL 클라이언트 프로그램이 아닌 SQL Injection 공격 중의 데이터 조회라는 제한된 환경이라는 점입니다.

이 부분이 가장 큰 이유인데 cmd 창에서 mysql 접속해서 sql 실행하면 한번에 쭉~ 출력이 되지만 SQL Injection 공격 시에는 그렇지 못한 경우가 상당히 많습니다. 

특히 Blind-Based 공격의 경우는 한문자 한문자 씩 추론을 해야 되는 상황인데 한번에 목록화는 불가능하겠죠?

때문에 공격자가 원하는 테이블의 컬럼을 조회하는게 보다 효과적일 수 있습니다.

제가 이렇게 텍스트로만 적는다고 이해가 되실지 모르겠는데,

강의 끝까지 쭉 들어보시고 본인이 직접 수십번 공격 실습하시다보면 느끼실 수 있습니다.ㅎㅎ