SQL Server Stored Procedure 암호화
- Version : SQL Server 2000, 2005, 2008, 2008R2, 2012
웹 서버나 기타 응용 프로그램에서 SQL Server에 데이터를 입력하거나 조회, 삭제 등의 작업을 할 때 실제 코드를 알 수 없도록 Stored Procedure(SP)를 만들어서 사용한다.
SP의 장점은 캡슐화가 되어 있어 외부 사용자가 코드를 확인 할 수 없으며 성능상에서도 많은 이점이 있기에 거의 대부분이 사용한다. 하지만 관리자나 개발자는 SP의 코드를 볼 수가 있다.
중요한 로직의 경우 SP 자체를 암호화 하는 방법을 없을까?
방법은 간단하다. 프로시저 생성시 암호화 옵션을 추가 하면 된다. 암호화 옵션은 WITH ENCRYPTION 을 사용한다.
아래 스크립트를 실행 하면 SP를 암호화 하여 SP의 내용을 확인 할 수 없다고 나타난다.
CREATE PROCEDURE USP_ENCRYPT WITH ENCRYPTION
AS
SELECT 1
GO
EXEC SP_HELPTEXT 'USP_ENCRYPT' |
SSMS의 개체 탐색기에서도 암호화된 SP의 경우에는 자물쇠 모양의 아이콘이 표시되며 마우스 오른쪽을 클릭하였을 때에도 [수정]의 메뉴가 비활성화 되어 있다.
카탈로그 뷰 에서 직접 쿼리를 호출 하여 확인 해 보자. 암호화되지 않은 SP의 경우 조회가 되지만 암호화된 SP의 경우 NULL로 나타나는 것을 확인 할 수 있다.
-- Not Encryption SELECT DEFINITION FROM SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('DBO.USP_CHECKDB_JEVIDA')
-- Encryption SELECT DEFINITION FROM SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('DBO.USP_ENCRYPT') |
중요한 것은 암호화된 SP는 얼마든지 해독이 가능하다. 이미 많은 소프트웨어 업체들이 SP의 해독 프로그램을 서드파티로 제공하고 있다.
SP의 암호화 옵션을 안전을 위한 유일한 방법이라는 생각을 버리자.
[복호화 툴]
http://www.devlib.net/decryptsql.htm
http://www.sql-shield.com/support/decrypt-stored-procedure
[참고 자료]
http://msdn.microsoft.com/ko-kr/library/ms187926.aspx
http://www.mssqltips.com/sqlservertip/1046/decrypting-sql-server-database-objects/
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp