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

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33689
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 16962
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1543
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1134
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 999
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3263
1730 SQL Server에서 Trigger 활성 / 비활성 감시 jevida(강성욱) 2016.09.14 1687
1729 DDL Trigger를 이용한 데이터베이스 변경 사항 추적 jevida(강성욱) 2016.09.14 1437
1728 Trigger를 이용한 SQL Server 커넥션 풀링 확인 jevida(강성욱) 2016.09.14 1134
1727 SQL Server Trigger jevida(강성욱) 2016.09.14 998
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 898
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 968
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 1121
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 2011
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1316
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1355
» SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2822
1719 SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1778
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 2065
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5930
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1423
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 4460





XE Login