XP_CMDSHELL 및 sp_OACreate 프로시저 좀 쓰지 마.

MS SQL Server는 Oracle에 비해 정말 편리한 기능을 가지고 있다.
그것도 SQL 상에서 콘솔 명령어 날릴 수 있고 심지어 OLE 라이브러리를 불러다 쓸 수 있다.

는 개뿔 보안에 최악 프로시저 형제 되시겠다.
일단, 왜 쓰지 말아야 하는지 나열하겠다.

1. 이 프로시저가 털리면 DB 서버 자체가 털리는 거나 마찬가지

말 그대로다. SQL Server는 보통 가장 높은 권한(SYSTEM 및 Administrator 등)으로 돌아가며,
기재했던 프로시저는 이 권한 그대로의 명령어와 루틴을 실행한다.
심지어는 자기 편리하려고 프로시저의 권한을 public으로 물리는 미친 새끼들도 있다.
절대 그러지 마라. DB 시스템 다 털린다. 데이터 다 빼가거나 변조, 심지어 삭제나 다운은 시간 문제다.
그리고 일 발생하면 엉뚱한 곳에서부터 분석하게 된다.

참고로 필자 경험인데, 연습삼아 구축한 MSSQL에 이 프로시저 public 열리고 며칠 만에 짱깨한테 어드민 계정 털려 들어가지도 못했다.
다행히도 XenServer로 구축한 가상 OS였고, 연습서버라 다행이지 만약 실서버였으면 사상 최악의 공황이 아닐 수 없을 거다.

2. 이 프로시저에 딸려온 프로세스 망가지면 SQL Server 자체가 다운되버리는 불상사 발생

XP_CMDSHELL 의 경우 딱히 말할 것도 없다. 예외 처리에서 파일명 올바르던 어쩌던 다음 SQL 구문 실행에 큰 영향을 주지는 않는다.
문제는 바로 sp_OACreate 프로시저다. 이 프로시저는 OLE 라이브러리를 SQL Server 엔진에서 직접 구동하고 예외 처리가 안된 상태에서 실행하기 때문에,
만약 예외 처리를 재대로 하지 않거나 예상치 못하게 프로세스 다운이 발생하면 이게 바로 SQL Server 서비스 다운으로 직결이다.

예기치 않게 DB가 다운되면 그다음 시나리오는 더이상 얘기 안해도 알지?

DB는 DB답게 쓰자. 부족하다고 헛짓거리 하다가 털리지 말고.
정 부족함을 채우고 싶다면 CLR을 써라. SQL Server 2005부터 각 버전에 맞게 CLR 인터페이스를 지원한다.
오라클 또한 Java 를 지원하여 SQL의 부족함을 채울 수 있다.

composite / 2015년 7월 27일 / Piss Development

답글 남기기

Your email address will not be published / Required fields are marked *