데이터베이스 분류
PL/SQL코드 숨기기(wrap유틸리티 사용)
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 12,252 조회
- 0 추천
- 목록
본문
PL/SQL코드 숨기기(wrap유틸리티 사용)
작성자: 강명규 OS: Linux 2.4.18 Oralce: Oracle EE 8.1.7 보통 패키지 스펙의 정의(create or replace package..)는 .sql로, 패키지 body의 정의(create or replace package body ..)는 .plb확장자를 가지며 존재한다. 여기서 .sql은 당연히 pl/sql코드이다. 그러면 .plb는 무엇일까? 이것은 wrap유틸리티에 의해 pl/sql의 소스코드가 암호화(encrypt)된 것을 의미한다. wrap에 의해 처리되더라도 실제 text로 되어 볼 수는 있지만, 암호화되어 있으므로 소스를 파악할 수는 없다. C언어에 연관하여 보면, include파일은 일반 텍스트로 되어 있어 함수들의 선언부를 통해 제공되는 함수가 어떤 것들이 있는지 파악할 수 있다. 하지만, 함수의 정의부분인 C소스파일은 컴파일후 라이브러리로 만들어 소스의 내용을 감추는 것과 같다고 하겠다. 따라서, .sql파일에 패키지 스펙의 정의부분을 두어 제공되는 프로시저, 함수들을 사용자들이 알 수 있게 하고, 패키지 body의 소스부분은 wrap으로 감추어 사용자는 단지 제공되는 패키지의 함수나 프로시저에 대한 사용만 하면 되는 것이다. 왜 암호화하는 것이 필요한 것일까? 다음과 같은 이유가 있을 것이다. 1. 다른 개발자의 PL/SQL 소스변경으로 발생할 수 있는 껀덕지(^^) 제거 2. 사용된 알고리즘을 보여주고 싶지 않다. 설명이 길어졌는데(?) 예를 통해 알아보자. 우선, 간단한 pl/sql코드를 가지고 테스트하겠다. [kang@ns oracle]$ create or replace procedure proc_dbakorea_test is begin dbms_output.put_line('This sample comes from dbakorea.pe.kr'); end; / [kang@ns oracle]$ PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Thu Sep 26 17:44:17 2002 Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved. Processing test.sql to test.plb [kang@ns oracle]$ SQL*Plus: Release 8.1.7.0.0 - Production on Thu Sep 26 17:44:23 2002 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.7.0.1 - Production With the Partitioning option JServer Release 8.1.7.0.1 - Production SQL> Procedure created. SQL> SQL> exec proc_dbakorea_test; This sample comes from dbakorea.pe.kr PL/SQL procedure successfully completed. SQL> wrap은 상위호환성을 가지므로 하위버전의 오라클에서 컴파일된 plb파일도 상위버전에게 적용될 수 있다. 즉, 8.1.5에서 컴파일된 plb파일도 8.1.7에서 사용될 수 있다는 것이다. 그럼, 실제 패키지에 대해 간단하게 적용해 보자. 이전에 설명된 pkg_dbakorea패키지를 그대로 사용하겠다. [kang@ns oracle]$ create or replace package pkg_dbakorea as procedure insert_test(v_id IN TEST.ID%type, v_name IN TEST.NAME%type); function print_date return varchar; end; / [kang@ns oracle]$ create or replace package body pkg_dbakorea as procedure insert_test ( v_id IN TEST.ID%type, -- ID v_name IN TEST.NAME%type -- 이름 ) is begin insert into test(id, name) values(v_id, v_name); commit; end; function print_date return varchar is cur_date varchar(15); begin select to_char(sysdate, 'YYYY-MM-DD') into cur_date from dual; return cur_date; end print_date; end; / [kang@ns oracle]$ PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Thu Sep 26 17:50:22 2002 Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved. Processing pkg_dbakorea_body.sql to pkg_dbakorea.plb [kang@ns oracle]$ SQL*Plus: Release 8.1.7.0.0 - Production on Thu Sep 26 17:50:34 2002 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.7.0.1 - Production With the Partitioning option JServer Release 8.1.7.0.1 - Production SQL> Package created. SQL> Package body created. SQL> select pkg_dbakorea.print_date() from dual; PKG_DBAKOREA.PRINT_DATE() --------------------------------------------------------------------------------
"무단배포금지: 클라우드포털(www.linux.co.kr)의 모든 강좌는 저작권에 의해 보호되는 콘텐츠입니다. 무단으로 복제하여 배포하는 행위는 금지되어 있습니다."
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.