요즘 MS-SQL이나 Oracle로 구축된 사이트의 경우 개발언어가 무엇이든간에 DB성능상의 이유로 Prepared Statement 를 사용해서 구축된다. 이럴때는 SQL에 변수를 바인딩하기 때문에 SQL Injection 공격을 당할 소지 자체가 원천적으로 사라진다.

하지만 mysql의 경우 Prepared Statement를 이상한 형태로 지원한다. MySQL은 SQL문의 실행계획을 DB레벨이 아니라 Connection레벨에서 유지한다. 즉, 커넥션 끊어버리면 실행계획이 다 날아간다. 따라서 Permanent Connection 이나 Connection Pooling을 사용할 때나 실행계획 재사용이라는 Prepared Statement의 이점을 누릴 수 있다. 하지만 php 개발하는데 누가 커넥션 풀링을 사용하나? (간혹 있는데 대부분의 중소 사이트는 그렇지 않다.) 따라서 자연스럽게 Prepared Statement를 하지 않고 Text로 SQL을 조립하는 방향으로 개발하게 된다. 10년전.. MSSQL이나 Oracle세계에서 쓰던 방식이 되겠다... 하아....

결과적으로, 변수받아서 SQL을 조립할 때 SQL Injection 방지를 위한 별도의 처리를 해주지 않으면 해커들에게 "날 잡아잡수쇼~" 하는게 되는 것이다.

모든 변수에다가 별도처리해주려면 그야말로 환장을 한다. 어흐흐흐. mysql은 빨리 제대로 된 Prepared Statement 를 지원하라!!!!!!!! -_-;;;;;;;;;

Posted by maceo

12 4, 2009 17:33 12 4, 2009 17:33
, ,
Response
No Trackback , No Comment
RSS :
http://merritt.co.kr/tt/rss/response/137

mysql에서 그룹별 TOP n 뽑아오기

오라클에서는 무식하게 하면 row_number() over (partition by) 로
MS-SQL에서는 좀 더 세련되게 cross apply 로 해결할 수 있는데
(오라클에서 cross join 으로 cross apply 를 비슷하게 흉내내는 기법이 있는데 까먹었다. 도저히 생각이 안난다 ㅠ_ㅠ 또는... MULTISET 으로 scalar subquery 가 여러개의 행을 리턴할 때도 문제없이 처리하는 방법이 있다.)

mysql에서 쩔쩔 매다가 아래를 발견!!!

http://blackbull.tistory.com/43

이 생각을 못하다니. 바보 -_-;;;;

Posted by maceo

11 9, 2009 16:19 11 9, 2009 16:19
Response
No Trackback , No Comment
RSS :
http://merritt.co.kr/tt/rss/response/136

MySQL 8개월 사용 소감

NC로 옮겨와서 새로운 서비스를 만들고 있는데 여기서는 mysql 을 사용하고 있다.

아휴.. 이거 뭐, MS-SQL로 시작해서 Oracle에 MySQL까지.. 우물을 세개나 파다니 어질어질하기도 하지만 세개의 DB가 전체적으로 비교가 되어서 좋기도 하다.

결론부터 말하자면 MySQL 이거 아주 장래가 촉망되는 물건이다. 거대 상용 DB들에 대한 disruptive innovation 이랄 수 있다. 아직 Hash join, Parallel Query라는 거대한 산을 넘어야 하는 이슈가 있긴 하지만, OLTP에만 쓴다면 이런거 필요없다. DW에도 어느정도 사용할 수도 있는 것이, Infobright 라는 column 기반 스토리지 엔진을 사용하면 DW/OLAP도 커버가능하다고 한다 (어느정도까지겠지... ㅎㅎㅎ) 중요한거는 소스가 공개되어 있고 스토리지 엔진을 따로따로 가져갈 수 있어서 이러한 변종까지 등장할 정도로 유연하다는게 장점이다.

최근 Amazon Relational Data Service 가 나왔는데 이게 MySQL을 근간으로 하고 있다. 아마존 SimpleDB라는게 있긴 했지만 이젠 본격적인 RDB 클라우드 서비스를 제공해주는 셈.

이제는 이론적으로는 이런 그림이 가능하다.

1. OLTP는 amazon RDS 로 운영
2. 이미지, 첨부파일은 amazon S3 에 저장
3. DW/OLAP등 분석계 작업은 amazon SimpleDB
(내부적으로 MapReduce같은거 지원하지 않을까?? 없으면 분명히 나올거다)

에서 수행하면, 거대한 서버 인프라가 전혀 필요가 없게된다.

10년후를 바라보면, 이런 클라우드 자체를 운영하는 Job이 각광을 받을 수도 있겠다.
아 물론 지금 Linux 때문에 HP-UX/IBM AIX 엔지니어들이 다 굶어죽은거 아니고 tomcat때문에 WebLogic 엔지니어들 다 굶어죽은거 아니다 .하지만 DB서버 바로 앞단까지 Linux가 침투한 현실을 고려하면, 10년후에는 MySQL의 위상이 굉장히 많이 올라갈 듯 하다. 아마도 Linux가 걸은 길을 그대로 걷지 않을까 싶다.



@그런데 시중에는 제대로된 MySQL 백업 & 리커버리 가이드 책도 없는 실정이다. 오라클 7.0 시절의 관련 도서 시장과 비슷한 분위기랄까? 쓸만한 책 번역해서 내놓으면 꾸준히 팔릴 것 같다 -_-;;;;;;;;;

Posted by maceo

11 9, 2009 16:11 11 9, 2009 16:11
,
Response
No Trackback , No Comment
RSS :
http://merritt.co.kr/tt/rss/response/135


블로그 이미지

가늘어도 긴놈이 장땡

- maceo

Archives

Authors

  1. maceo

Calendar

«   3 2010   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Site Stats

Total hits:
170288
Today:
32
Yesterday:
47