Oracle 암/복호화 (DBMS_CRYPTO) 스크립트


GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO system;

 

GRANT EXECUTE ON DBMS_CRYPTO TO system;


create or replace function TYS_Encrypt (input_string VARCHAR2) RETURN RAW

IS

   -- select DBMS_CRYPTO.RANDOMBYTES (num_key_bytes) from dual; --> key_bytes_raw

   encrypted_raw      RAW (2000);             -- stores encrypted binary text

   key_bytes_raw      RAW (32) := HEXTORAW('6E266456572A3E4C79D677BAC5144A645DF911CE07F18AEFF57C3E8560AE1672');  --암호화 키

   encryption_type    PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;  --암호화 알고리즘

BEGIN

     encrypted_raw := DBMS_CRYPTO.ENCRYPT

      (src => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),

       typ => encryption_type,

       key => key_bytes_raw);


   return encrypted_raw;

   

END;

/


[PACKAGE]


CREATE OR REPLACE PACKAGE SCOTT.CRYPTO_AES256

IS

 

/******************************************************************************

  암호화

 ******************************************************************************/

 FUNCTION ENC_AES ( input_string IN VARCHAR2

 ) RETURN VARCHAR2;

 

 

/******************************************************************************

  복호화

 ******************************************************************************/

 FUNCTION DEC_AES (  encrypted_raw IN VARCHAR2

 ) RETURN VARCHAR2;                       

 

END CRYPTO_AES256;

/


CREATE OR REPLACE PACKAGE BODY SCOTT.CRYPTO_AES256

IS

 

/******************************************************************************

  암호화

 ******************************************************************************/

 FUNCTION ENC_AES ( input_string IN VARCHAR2

 ) RETURN VARCHAR2

 IS

   

   encrypted_raw      RAW (2000);             -- 암호화된 RAW타입 데이터

   key_bytes_raw      RAW (32);               -- 암호화 KEY (32RAW => 32Byte => 256bit)

   encryption_type    PLS_INTEGER :=          -- 암호화 알고리즘 선언

                            DBMS_CRYPTO.ENCRYPT_AES256

                          + DBMS_CRYPTO.CHAIN_CBC

                          + DBMS_CRYPTO.PAD_PKCS5;

    BEGIN

      

        key_bytes_raw := UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8');

        encrypted_raw := DBMS_CRYPTO.ENCRYPT

            (

                src => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),

                typ => encryption_type,

                key => key_bytes_raw

            );

      

        -- 에러 방지를 위해 base64_encode로 인코딩 처리..

        -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error

        RETURN UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(encrypted_raw));

       

    END ENC_AES;

 

 

/******************************************************************************

  복호화

 ******************************************************************************/

 FUNCTION DEC_AES (  encrypted_raw IN VARCHAR2

 ) RETURN VARCHAR2

IS

 

   output_string      VARCHAR2 (200);         -- 복호화된 문자열

   decrypted_raw      RAW (2000);             -- 복호화된 raw타입 데이터

   key_bytes_raw      RAW (32);               -- 256bit 암호화 key

   encryption_type    PLS_INTEGER :=          -- 복호화 알고리즘 선언

                            DBMS_CRYPTO.ENCRYPT_AES256

                          + DBMS_CRYPTO.CHAIN_CBC

                          + DBMS_CRYPTO.PAD_PKCS5;

    BEGIN

   

        key_bytes_raw := UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8');

        decrypted_raw := DBMS_CRYPTO.DECRYPT

            (

                -- 에러 방지를 위해 base64_decode로 인코딩 처리..

                -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error

                src => UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(encrypted_raw)),

                typ => encryption_type,

                key => key_bytes_raw

            );

       output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');

    

       RETURN output_string;

      

    END DEC_AES;                       

 

END CRYPTO_AES256;

/

 


[Funtion]



create FUNCTION ENC_AES ( input_string IN VARCHAR2

 ) RETURN VARCHAR2

 IS

 /******************************************************************************

  암호화

 ******************************************************************************/

   

   encrypted_raw      RAW (2000);             -- 암호화된 RAW타입 데이터

   key_bytes_raw      RAW (32);               -- 암호화 KEY (32RAW => 32Byte => 256bit)

   encryption_type    PLS_INTEGER :=          -- 암호화 알고리즘 선언

                            DBMS_CRYPTO.ENCRYPT_AES256

                          + DBMS_CRYPTO.CHAIN_CBC

                          + DBMS_CRYPTO.PAD_PKCS5;

    BEGIN

      

        key_bytes_raw := UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8');

        encrypted_raw := DBMS_CRYPTO.ENCRYPT

            (

                src => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),

                typ => encryption_type,

                key => key_bytes_raw

            );

      

        -- 에러 방지를 위해 base64_encode로 인코딩 처리..

        -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error

        RETURN UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(encrypted_raw));

       

    END ENC_AES;

 /

 


 create FUNCTION DEC_AES (  encrypted_raw IN VARCHAR2

 ) RETURN VARCHAR2

IS

 

/******************************************************************************

  복호화

 ******************************************************************************/

   output_string      VARCHAR2 (200);         -- 복호화된 문자열

   decrypted_raw      RAW (2000);             -- 복호화된 raw타입 데이터

   key_bytes_raw      RAW (32);               -- 256bit 암호화 key

   encryption_type    PLS_INTEGER :=          -- 복호화 알고리즘 선언

                            DBMS_CRYPTO.ENCRYPT_AES256

                          + DBMS_CRYPTO.CHAIN_CBC

                          + DBMS_CRYPTO.PAD_PKCS5;

    BEGIN

   

        key_bytes_raw := UTL_I18N.STRING_TO_RAW('12345678901234567890123456789012', 'AL32UTF8');

        decrypted_raw := DBMS_CRYPTO.DECRYPT

            (

                -- 에러 방지를 위해 base64_decode로 인코딩 처리..

                -- ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error

                src => UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(encrypted_raw)),

                typ => encryption_type,

                key => key_bytes_raw

            );

       output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');

    

       RETURN output_string;

      

    END DEC_AES;                       


/


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

빅데이터 (Big Data)



1. 빅데이터 (Big Data)의 개요

 1-1. 정의

    - 대량의 흩어진 데이터를 수집, 저장, 발굴, 분석 하여 2차 데이터로 만들어 내고 이를 비즈니스화 하는 일련의 과정

    - Innovation, Competition, Productivity


 1-2. 특성

   1) Volume : 수십 PB

   2) Velocity : 실시간 처리 기반

   3) Variety  :  Legacy 데이터 및 트랜잭션, 모바일


2. 빅데이터 (Big Data)의 구성도, 기술요소

 2-1. 빅데이터 (Big Data)의 구성도


 2-2. 빅데이터 (Big Data) 기술요소

  1) 원본 데이터 저장 : 대용량 분산 파일 저장

  2) 구조적 데이터 저장 : 대용량 분산 데이터 저장소

  3) 배치 분산 병렬 처리 : 분산 데이터 처리 기술

  4) 데이터 스트리밍 프로세싱 : 스트리밍 데이터 프로세싱 기술

  5) 데이터 마이닝 : 빅 데이터의 패턴 분석 및 고객 분석을 위한 알고리즘

  6) 데이터 분석 알고리즘 : 데이터 분석을 위한 세부 기술

  7) 분산처리 기술 : 관리 기술, 분산 큐 기술


3. 빅데이터 (Big Data)의 활용

 - 공공 : 국가적 차원의 수자원 관리, 스마트 그리드, 재난 방지 영역 등

 - 과학 : 환경, 기후, 해양 등 글로벌 문제 해결에 필요한 대규모 과학 데이터 분석

 - 의료 : 미래에 겪을 수 있는 질환이나 증상을 미리 예측 및 예방하고 통합되는 확장되 서비스


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

OR_MAPPING (Object Relational Mapping)



1. OR_MAPPING (Object Relational Mapping)의 개요

 1-1. 정의

   - 객체지향 프로그래밍 시 설계할 클래스들과 데이터저장소로 이용될 RDBMS Table간의 Mapping 기법.


 1-2. 필요성

    - 객체 지향 개념을 기반으로 한 OODB(Object-Oriented DB)가 활성화 되지 못하여, 설계 단계의 클래스 모델을 RDBMS 모델로 전환하기 위한 기법 및 절차가 필요함

    - 객체지향 관점의 분석/설계구현 방법론을 정보시스템 개발에 적용하기 위하여 관계형 DB와의 구조적인 연계를 고려

 

2. OR_MAPPING (Object Relational Mapping)의 변환구조도 및 주요 절차, 적용 방안

 2-1. OR_MAPPING (Object Relational Mapping)의 변환 구조도


 2-2. OR_MAPPING (Object Relational Mapping)의 주요 절차

  1) Class To Table : Class instance는 Table의 Record로 매핑

  2) Attribute To Column : Class instance의 Attribute는 Table의 Column으로 매핑

  3) Class Relationship To Relational Relationship : Class간의 관계인을 관계형 DB로 관계로 변환


 2-3. OR_MAPPING (Object Relational Mapping)의 적용 방안

  1) 적용전략 측면

    - 반드시 적용 전 1개 이상 Framework를 테스트 실시 후 선택

    - DA와 도메인 전문가, 아키텍트의 참여에 의한 Mapping 기법을 적용할 DB 설계

  2) 기술적 인식 측면

    - 성능향상을 위한 기술이라기 보다는 기본적으로 OR간의 불일치를 해결하는데 소요되는 기술이라는 인식 필요

    - SQL을 잘 몰라도 개발을 가능하게 하는 기술이기보다는 SQL을 잘 아는 개발자가 DB와 관련된 반복적인 코딩 없이 개발을 가능하게 하는 기술이라는 인식 필요

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

드론 (Drone)



1. 드론 (Drone)의 개요

 1-1. 정의

   - 조종사 없이 무선전파로 유도하거나, 지상에서 원격으로 조정하는 무인항공기 시스템


 1-2. 특징

    - 이동성 : 교통 체증, 험한 지형등 사람이 접근하기 어려운 지역에 접근이 용이하여 임무수행 가능

    - 확산성 : 다양한 센서를 활용한 다양한 산업 적용가능

    - 대체 노동성 : 인간의 노동력 대체하는 방향으로 활용도 높음


2. 드론 (Drone)의 구성도, 구성요소, 상용화시 주의사항

 2-1. 드론 (Drone)의 구성도

 

 2-2. 

 - 참고자료 : 기획재정부 


2-2. 드론 (Drone)의 구성요소

   1) 비행체 : 무인항공기의 기체를 말하며 기체에 실리는 추진 장치, 연료 장치, 전기 장치, 향법 전자 장치, 전기 장치 및 통신 장비 등을 포함

   2) 지상 통제 장치 : 임무 계획 수립과 비행체 및 임무 탑재체의 조정 명령, 통제 그리고 영상 및 데이터의 수진 등 무인 항공기 운용을 위한 주 통제 장치

   3) 임무 탑재체 : 카메라, 합성구경 레이더, 통신 중계기, 무장 등의 임무 수행을 위해 비행체에 탑재되는 임무 수행

   4) 데이터 링크 : 비행체 상태의 정보, 비행체의 조정 통제, 임무 탑재체가 획득하거나 수행된 정보등의 전달에 요구되는 비행체와 지상간의 무선 통신 요소

   5) 이착륙 장치 : 무인 항공기가 지상으로부터 발사 및 이륙하고 착륙 및 회수하는데 필요한 장치

   6) 지상 지원 : 무인 항공기 시스템의 운용과 유지를 위해 소요되는 일련의 지상 지원 설비 및 인력 등을 총칭하는 말이며 무인항공기의 효율적인 운용에 필요한 분석, 정비, 교육 장비 시스템을 포함


 2-3. 드론 (Drone)의 상용화시 주의사항

  - 법적 규제 문제

  - 충돌, 추락 감시문제

  - 사생활 침해문제

  - 해킹, 보안 문제





블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

DB PROFILE/BASH_PROFILE 적용 스크립트



DB가 한 서버에 여러개가 존재할때 SID 별 DB 접근하기 편하도록 쉘스크립트 수정

export EDITOR=vi


echo "======================================="

echo "===Please Select the Instance Number==="

echo "======================================="

echo "1) TESTDB"

echo "2) STARTDB"

echo "3) ABCDB"

echo "What number do you want?"

read number


case $number in

        "1")

                export ORACLE_SID=TESTDB

                echo "Thank you for selecting TESTDB"

                ;;

        "2")

                export ORACLE_SID=STARTDB

                echo "Thank you for selecting STARTDB"

                ;;

        "3")

                export ORACLE_SID=ABCDB

                echo "Thank you for selecting ABCDB"

                ;;

        *)

                exit;;

esac



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

HDFS (Hadoop Distributed File System)



1. HDFS (Hadoop Distributed File System)의 개요

 1-1. 정의

   - 저비용의 수백 내지 수천 노드를 가지는 클러스터를 이용하여 기가 바이트 또는 테라 바이트의 대용량 데이터 집합을 처리하는 응용 프로그램에 적합하도록 설계한 분산 파일 시스템

 

 1-2. 특징

    1) 빅데이터 처리 : 대용량 데이터 처리를 위한 경제성, 유연성, 확장성 제공 

    2) TCO 절감 : Linux 및 저가형 서버 구성에도 신뢰성 있는 파일 시스텔 제공

    3) Fault Tolearance : 디스크 I/O 장애에도 Replication 기법 등을 통해 높은 가용성 제공

    4) 효율적인 분산 파일 시스템 : 메타데이터 활용을 통해 SAN과 같은 별도 장비 없이 구현 가능


2. HDFS (Hadoop Distributed File System) 구성도, 구성요소, 처리절차

  2-1. HDFS (Hadoop Distributed File System) 구성도


  2-2. HDFS (Hadoop Distributed File System) 구성요소

    - Name Node : 파일 시스템의 Metadata을 관리하는 서버

    - Data Node : 실제 데이터를 저장 유지하는 서버

    - Secondary Name Node : Name Node의 Metadata 로드가 실패시 Backup Node로써 사용

    - Job Tracker : 분산 환경에서 작업을 분산시키는 스케쥴작업

    - Task Tracker : Data Node에서 Map-Reduce 역할을 수행


3. HDFS (Hadoop Distributed File System) 동작

  1) Data Read

    - 클라이언트는 Name Node로 해당 파일의 블록 위치를 요청

    - Name Node는 복제 블록이 저장된 곳을 확인후, 클라이언트에게 가까운 순서로 정렬해서 반환

    - 클라이언트는 Data Node에게 블록 데이터 요청


   2) Data Write

     - 클라이언트는 Name-Node로 해당 파일 생성요청

     - Name Node는 해당 파일 블록을 저장할 Data Node의 목록으로 전달

     - 클라이언트는 첫번째 Data Node에게 데이터 전송

     - 데이터 복제는 Data Node간 파이프 라인을 통해 이루어짐


'1. IT Story > Basic Studies' 카테고리의 다른 글

3D 프린팅 (제조업의 혁신)  (0) 2019.02.24
빅데이터 (Big Data)  (0) 2019.02.21
OR_MAPPING (Object Relational Mapping)  (0) 2019.02.20
드론 (Drone)  (0) 2019.02.19
데이터사이언티스트  (0) 2019.02.16
R (빅데이터 분석 소프트웨어)  (0) 2019.02.15
스마트 데이터 (Smart Data)  (0) 2019.02.14
CQL (Continuous Query Language)  (0) 2019.02.12
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


ORACLE SCN HELTH CHECK


define LOWTHRESHOLD=10

define MIDTHRESHOLD=62

define VERBOSE=FALSE


set veri off;

set feedback off;


set serverout on

DECLARE

 verbose boolean:=&&VERBOSE;

BEGIN

 For C in (

  select 

   version, 

   date_time,

   dbms_flashback.get_system_change_number current_scn,

   indicator

  from

  (

   select

   version,

   to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') DATE_TIME,

   ((((

    ((to_number(to_char(sysdate,'YYYY'))-1988)*12*31*24*60*60) +

    ((to_number(to_char(sysdate,'MM'))-1)*31*24*60*60) +

    (((to_number(to_char(sysdate,'DD'))-1))*24*60*60) +

    (to_number(to_char(sysdate,'HH24'))*60*60) +

    (to_number(to_char(sysdate,'MI'))*60) +

    (to_number(to_char(sysdate,'SS')))

    ) * (16*1024)) - dbms_flashback.get_system_change_number)

   / (16*1024*60*60*24)

   ) indicator

   from v$instance

  ) 

 ) LOOP

  dbms_output.put_line( '-----------------------------------------------------'

                        || '---------' );

  dbms_output.put_line( 'ScnHealthCheck' );

  dbms_output.put_line( '-----------------------------------------------------'

                        || '---------' );

  dbms_output.put_line( 'Current Date: '||C.date_time );

  dbms_output.put_line( 'Current SCN:  '||C.current_scn );

  if (verbose) then

    dbms_output.put_line( 'SCN Headroom: '||round(C.indicator,2) );

  end if;

  dbms_output.put_line( 'Version:      '||C.version );

  dbms_output.put_line( '-----------------------------------------------------'

                        || '---------' );


  IF C.version > '10.2.0.5.0' and 

     C.version NOT LIKE '9.2%' THEN

    IF C.indicator>&MIDTHRESHOLD THEN 

      dbms_output.put_line('Result: A - SCN Headroom is good');

      dbms_output.put_line('Apply the latest recommended patches');

      dbms_output.put_line('based on your maintenance schedule');

      IF (C.version < '11.2.0.2') THEN

        dbms_output.put_line('AND set _external_scn_rejection_threshold_hours='

                             || '24 after apply.');

      END IF;

    ELSIF C.indicator<=&LOWTHRESHOLD THEN

      dbms_output.put_line('Result: C - SCN Headroom is low');

      dbms_output.put_line('If you have not already done so apply' );

      dbms_output.put_line('the latest recommended patches right now' );

      IF (C.version < '11.2.0.2') THEN

        dbms_output.put_line('set _external_scn_rejection_threshold_hours=24 '

                             || 'after apply');

      END IF;

      dbms_output.put_line('AND contact Oracle support immediately.' );

    ELSE

      dbms_output.put_line('Result: B - SCN Headroom is low');

      dbms_output.put_line('If you have not already done so apply' );

      dbms_output.put_line('the latest recommended patches right now');

      IF (C.version < '11.2.0.2') THEN

        dbms_output.put_line('AND set _external_scn_rejection_threshold_hours='

                             ||'24 after apply.');

      END IF;

    END IF;

  ELSE

    IF C.indicator<=&MIDTHRESHOLD THEN

      dbms_output.put_line('Result: C - SCN Headroom is low');

      dbms_output.put_line('If you have not already done so apply' );

      dbms_output.put_line('the latest recommended patches right now' );

      IF (C.version >= '10.1.0.5.0' and 

          C.version <= '10.2.0.5.0' and 

          C.version NOT LIKE '9.2%') THEN

        dbms_output.put_line(', set _external_scn_rejection_threshold_hours=24'

                             || ' after apply');

      END IF;

      dbms_output.put_line('AND contact Oracle support immediately.' );

    ELSE

      dbms_output.put_line('Result: A - SCN Headroom is good');

      dbms_output.put_line('Apply the latest recommended patches');

      dbms_output.put_line('based on your maintenance schedule ');

      IF (C.version >= '10.1.0.5.0' and

          C.version <= '10.2.0.5.0' and

          C.version NOT LIKE '9.2%') THEN

       dbms_output.put_line('AND set _external_scn_rejection_threshold_hours=24'

                             || ' after apply.');

      END IF;

    END IF;

  END IF;

  dbms_output.put_line(

    'For further information review MOS document id 1393363.1');

  dbms_output.put_line( '-----------------------------------------------------'

                        || '---------' );

 END LOOP;

end;

/


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

데이터사이언티스트



1. 데이터사이언티스트의 개요

  1-1. 정의

    - 기하급수적으로 늘어가는 데이터를 효과적으로 관리, 예측, 의사결정 위한 전문가 요구 데이터를 분석하여 비즈니스 속성 이해 통한 미래 예측 수행


2. 데이터사이언티스트의 수행 역할도 및 역량

 2-1. 데이터사이언티스트의 수행 역할도

 - 다양한 플랫폼 기반, 분석 인프라를 이용하여 데이터를 수집, 분석 및 가치를 발견하여 기업/조직의 의사결정에 필요한 정보를 제공



 2-2. 데이터사이언티스트의 역량

   1) 관리수행

      - 비즈니스의 이해

      - 데이터관리

      - 데이터 분석

      - 변관관리


   2) 기술역량

       - 통계분석 도구 이해

       - 프로그래밍 언어

       - RDBMS 기술

       - 분산 컴퓨팅

       - 수리적 지식


   3) Hard Skill

        - 빅데이터에 대한 이론적 지식

        - 분석기술에 대한 숙련


   4) Soft Skill

          - 통찰력 있는 분석

          - 설득력 있는 전달

          - 다분야간 협력


3. 데이터사이언티스트 육성방안

  1) 비즈니스

      - 비즈니스 목표 명확화

      - 데이터 관리 프로세스 혁신


  2) 조직

      - 전담 조직 구성

      - CDMO 영입

'1. IT Story > Basic Studies' 카테고리의 다른 글

빅데이터 (Big Data)  (0) 2019.02.21
OR_MAPPING (Object Relational Mapping)  (0) 2019.02.20
드론 (Drone)  (0) 2019.02.19
HDFS (Hadoop Distributed File System)  (0) 2019.02.18
R (빅데이터 분석 소프트웨어)  (0) 2019.02.15
스마트 데이터 (Smart Data)  (0) 2019.02.14
CQL (Continuous Query Language)  (0) 2019.02.12
디지털큐레이션 (Digital Curation)  (0) 2019.02.12
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,