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 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1291
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 879
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 938
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 1042
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 1955
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1293
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1310
» SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2794
1719 SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1731
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 1936
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5820
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1395
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 4164
1714 DMV를 이용한 SQL Server 성능 카운터 확인 jevida(강성욱) 2016.09.13 1844
1713 DMV를 이용한 SQL Server IO 성능 모니터 스냅샷 만들기 jevida(강성욱) 2016.09.13 1269
1712 DMV를 활용한 SQL Server 모니터링 jevida(강성욱) 2016.09.13 1310
1711 세션에 따른 캐시된 쿼리 플랜 설정 확인 jevida(강성욱) 2016.09.13 900
1710 SQL Server 특정 세션에 대한 마지막 실행 문장 확인 jevida(강성욱) 2016.09.13 758
1709 DMV - 데이터베이스 버퍼 메모리 사용량 확인 jevida(강성욱) 2016.09.13 3065
1708 Sys.dm_fts_parser을 이용한 문자열 구문 분석 jevida(강성욱) 2016.09.13 1362
1707 DMV에서 SQL Server 리소스 데이터베이스 값 jevida(강성욱) 2016.09.13 1098





XE Login