반응형

Oracle 컬럼 암호화 (Transparent Data Encryption)

Oracle10g Release 2에서는 데이터의 암호화를 위하여 
Transparent Data Encryption (이하 TDE) 라는 기능을 제공한다.

이 기능의 특징은


1. 테이블의 컬럼별로 데이터를 암호화 할 수 있다.
2. 인덱스도 암호화 할 수 있으며, 인덱스에 암호화 하더라도 성능의 큰 저하는 없다
(Oracle에서는 Insert시 1.6배, Select시 1.4배의 저하가 생긴다고 함..수치 확인필요)
3. pl-sql로 암호화/복호화의 DDL을 재정의, 혹은 정의 할 필요가 없다.
4. 물리적인 데이터파일(dbf확장자 파일)의 도난에 안전하다.
5. 동일 Wallet으로 Data Dump의 import, export도 가능하다.
6. AES128, AES192, AES256, 3DE168(168비트 Triple DES알고리즘)로 암호화 가능.
7. Salt라는 기능으로 같은 값의 데이터를 다른 암호화된 데이터로 저장 가능.
8. 기존 테이블에 ALTER TABLE 테이블명 MODIFY (컬럼명 ENCRYPT)로 
   암호화 가능


이정도가 될 것 같다. 장점을 우선으로 나열했다.

구현 방법은


1. %ORA_HOME%\admin\SID 밑에 wallet이라는 폴더를 만든다
(디폴트로 해당 폴더가 생성되지 않는다. wallet을 저장하는 디폴트 폴더가 저기.)

2. ALTER SYSTEM권한이 있는 계정으로 로그인한다.
(SYSDBA계정으로 GRANT해도 되고, SYSDBA계정으로 로그인해도 됨)

3. ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY "비밀번호"; 입력
(비밀번호는 반드시 더블쿼테이션으로..)
(AUTHENTICATED 대신 IDENTIFIED로 해도 됐었던 기억이...)
※ 이때 wallet을 자동 생성 할 수 없다는 에러가 발생할 때
 → 1번의 폴더 생성확인 해 볼 것. 
     비밀번호를 영어대소문자, 숫자, 특수문자를 포함하는 8자리 이상으로 지정 해 볼 것.

4. 1번의 폴더에 물리적 wallet파일이 생성되었는지 확인

5. 4번으로 생성된 wallet이 자동으로 open되나, open되었는지 확인 (에러 확인)
(ALTER SYSTEM SET ENCRYPTION WALLET OPEN AUTHENTICRYPTED BY "비밀번호"; 여기서 비밀번호는 생성시의 비밀번호)
※ WALLET 닫기
→ ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;

6. 테이블 생성 (컬럼 정의 시, 암호화 할 컬럼 맨 마지막에 ENCRYPT 정의)
ex) CREATE TABLE encryptedTable (col1 varchar2(10) ENCRYPT);
Primary key에 대해서는 SALT로 컬럼을 생성 할 수 없다.(ENCRYPT는 SALT가 기본)
그럴때는
CREATE TABLE encryptedTable (col1 varchar2(10) ENCRYPT NO SALT);

7. 기존 테이블을 수정 할 경우
ALTER TABLE 테이블명 MODIFY (컬럼명 ENCRPYT);

이것으로 기본 설정은 끝.


Tip!
1. 컬럼에 암호화 설정시, 암호화 방식을 설정 할 수 있다. (기본 AES192)
ex) ALTER TABLE 테이블명 MODIFY (컬럼명 ENCRYPT USING '방식');

2. 암호화된 컬럼의 암호화 설정 제거
ex) ALTER TABLE 테이블명 MODIFY (컬럼명 DECRYPT);

이제 평상시 대로 INSERT, UPDATE, DELETE, SELECT를 하면 된다.
쿼리의 결과로는 복호화되기 전의 암호화 된 데이터의 확인이 불가능하다.
WALLET을 CLOSE하고 DDL을 날리면 WALLET이 CLOSE되어 있다는 에러 발생.

※ TDE의 단점 
정당한 방법으로 로그인 한 유저에 대해서는 암호화 정책이 해당되지 않는다.

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형


 

    ORA-01034: ORACLE not available
    ORA-27101: shared memory realm does not exist

 

 

http://blog.naver.com/gogojinny80?Redirect=Log&logNo=110076620135

를 참고 하여 아래 명령어를 실행

 

 

    sqlplus /nolog

 

    sql>connect sys/비밀번호 as sysdba       //    conn sys/as sysdba

    sql>startup

 

 

하지만 실패..

왜이런 에러가 뜨는지 본에러 내용이 표출되었다.

 

ORA-01565

spfile을 불러 올 수 없어 에러가 나는것 같았다.

확실히 어제 nls_sort, nls_comp 파라메터를 추가 시켜주려고 수정했던것이 생각났다.

 

http://blog.naver.com/langve/80099521224

 

위 글로 부터

 

spfile : 환경변수를 저장한 2진 파일

pfile   : 환경변수를 저장한 텍스트 파일

 

파라미터 저장 파일 : [orahome]/dbs/spfile[sid].ora

                             8i 까지는 메모장같은것으로 위의 파일을 열어 수정 할 수 있었지만

                             9i 부터는 명령어를 통해서만 수정 가능하다.

                             파라미터 파일이 있어야 오라클이 구동 1단계를 커쳐 노마운트를 넘어 갈 수 있으므로

                             오라클이 구동되지 않고 v$ 내용마자 찾을 수 없다면 파라미터 파일을 고쳐야 한다.

이라는 정보를 얻었다.

 

어제 명령어로 수정한 spfile을 수정사항 복구를 위해 에디트플러스로 수정을 하여 발생했다는 원인을 파악 할 수 있었다.

그래서 에디트플러스로 파일을 열때 인코딩형식을 물어봤군..

 

이제는 손상된 spfile을 복구시키는 방법을 찾았다.

http://cafe.naver.com/oracle1004/108

http://blog.naver.com/meldin/60090587998

 

두글을 참고 하여 아래와 같은 절차를 통했다.

 

SQL> startup mount pfile=C:\oraclexe\app\oracle\product\10.2.0\server\config\scr
ipts\init.ora;
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
데이터베이스가 마운트되었습니다.
SQL> create spfile from pfile='C:\oraclexe\app\oracle\product\10.2.0\server\conf
ig\scripts\init.ora';

파일이 생성되었습니다.

SQL> shutdown immediate;
ORA-01109: 데이터베이스가 개방되지 않습니다


데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
데이터베이스가 마운트되었습니다.

데이터베이스가 열렸습니다.
SQL> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL>

 

에러 해결.

반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] 페이징 쿼리  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

[오라클 덤프 exp / imp]

 

1. DB 서버으로 접속 (ex 리눅스)

 

2. root 권한으로 변경

  - su-

 

3. 오라클 유저로 변경

  - su - oracle

 

4. 오라클 sqlplus 실행 

  - sqlplus "/as sysdba"

5. 해당 유저의 데이터를 export

  - exp 유저명/패스워드 file=파일명.dmp full=y;

 

6. 삭제할 유저가 사용하던 tablespace 확인(같은 테이블스페이스 지정시)

  - select DEFAULT_TABLESPACE from dba_users where username= 삭제할유저명

 

7. 유저 삭제 (기존 유저로 import 할 시 유저가 사용하던 테이블 모두 삭제되었는지 확인)

  - drop user 삭제할유저명 cascade;

 

8. import 받을 유저를 생성

  - CREATE USER 유저명 IDENTIFIED BY 패스워드 DEFAULT TABLESPACE 테이블스페이스명 TEMPORARY TABLESPACE TEMP;

 

9. 생성한 유저에게 권한부여

  - grant connect, resource, dba to 유저명;

 

10. 생성한 유저에게 import

  - imp 유저명/패스워드 file=파일명.dmp full=y;


반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] spfile 복구방법  (0) 2013.03.13
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] 페이징 쿼리  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

<대문자 조작 함수>

 

 

- LOWER : 대소문자 또는 대문자 문자열을 소문자로 변환합니다.

- UPPER : 대소문자 또는 소문자 문자열을 대문자로 변환합니다.

- INITCAP : 각 단어의 첫 문자를 대문자로, 나머지 문자는 소문자로 변환합니다.

 

 

 

 

<문자 조작 함수>

 

 

 

- CONCAT : 값을 결합합니다. CONCAT에는 파라미터를 두 개만 사용할 수 있습니다.

- SUBSTR : 지정한 길이의 문자열을 추출합니다.

- LENGTH : 문자열의 길이를 숫자 값으로 표시합니다.

- INSTR : 지정한 문자의 위치를 숫자로 표시합니다.

- LPAD : 문자값을 오른쪽으로 정렬하고 빈 곳을 지정한 문자열로 채웁니다. 

- RPAD : 문자값을 왼쪽으로 정렬하고 빈 곳을 지정한 문자열로 채웁니다.

- TRIM : 문자열에서 접두어나 접미어 또는 두 가지 모두를 자릅니다.


반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] spfile 복구방법  (0) 2013.03.13
[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] 페이징 쿼리  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

실수로 delete하고 커밋했을시,

오라클의 flash back이라는 기능을 통해 지운 데이터를 조회할 수 있다.


SELECT * FROM T_NAME

AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);



1. Flashback Query : 특정시간 이전의 Data 에 대해서 검색할 때

-> UNDO Data 를 기준으로 검색

1) 과거의 데이터 값 조회
     SELECT employee_id, salary FROM employees
      AS OF TIMESTAMP t1
      where emplooyee_id = 200

2) 특정 시험의 값을 이용하여 값을 수정 (서브쿼리 활용)
     UPDATE employees SET salary = 
                  (SELECT salary FROM employees
                  AS OF TIMESTAMP TO_TIMESTAMP
                  ('2005-05-04 11:00:00', 'yyyy-mm-dd hh24:mi:ss')
                  WHERE employee_id = 200)
     WHERE employee_id = 200

3) 기간을 정해서 검색 (VERSIONS BETWEEN)
    SELECT versions_xid, salary FROM employees
    VISIONS BETWEEN TIMESTAMP t1 AND t2
    WHERE employee_id = 200;
         
2. Flashback Transcation Query : UNDO SQL을 조회하는 기능

반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] 페이징 쿼리  (0) 2012.12.23
[Oracle] DATE 포맷 변경  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

 ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET', 'NLS_LANGUAGE');

NAMEVALUE$COMMENT$
NLS_NCHAR_CHARACTERSETAL16UTF16NCHAR Character set
NLS_LANGUAGEAMERICANLanguage
NLS_CHARACTERSETKO16KSC5601Character set

UTF8: 공통 size*3byte
AL16UTF16: 공통 size*2byte
KO16KSC5601: 한글 size*2byte, 영문 size*1byte

VARCHAR2 vs NVARCHAR2 : VARCHAR2는 LENGTH 계산시 byte 수로 계산, NVARCHAR2는 캐릭터셋에 맞게 논리적인 글자수로 계산 (개별 캐릭터셋 지정 가능)

LENGTH, LENGTHB 에 따른 차이가 나는 이유는 캐릭터셋 때문

SELECT  NC, LENGTH(NC) NC_LEN, LENGTHB(NC) NC_BLEN,

        LENGTHB(C) C_LEN, LENGTHB(C) C_BLEN,
        lengthb('각'),lengthb('A'),
        lengthb(TO_NCHAR('각')),lengthb(TO_NCHAR('A'))
FROM    CHAR_TEST
WHERE LENGTHB(C) = 17;

NCNC_LENNC_BLENC_LENC_BLENLENGTHB('각')LENGTHB('A')LENGTHB(TO_NCHAR('각'))LENGTHB(TO_NCHAR('A'))
안녕하세요.HI中國102017172122

반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[Oracle] 페이징 쿼리  (0) 2012.12.23
[Oracle] DATE 포맷 변경  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

* 1~10, 11~20 등의 페이징을 처리하는 오라클 쿼리 

 - end 와 start 값에 적절한 값을 넣어주도록 함.

 - TABLE : 테이블 병, SEQ : 정렬하고자 하는 기준 컬럼


select * 
from ( select rownum rn, T1.* from ( select * from TABLE order by SEQ) T1 where rownum <= #end# ) 
where rn >= #start#
  


반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] DATE 포맷 변경  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형
* DATE 포맷을 변경함
  현재 접속한 계정에 한 해 한시적으로 변경된다.
  - sqldeveloper에서 insert 쿼리를 export 할 경우 date 포맷의 값인 상태에서 export 할 경우
    시/분/초 값이 나오질 않음. 아래 쿼리 실행 후 export 하기를 권장.
    - TOAD에서는 별도의 설정없이도 원하는 값을 export 할 수 있음


alter session set NLS_DATE_FORMAT='rrrr/mm/dd HH24:MI:SS'
  


YYYY-MM-DD HH24:MI:SS


* HH24로 설정해야 21시, 22시 등으로 값이 표시됨.

  HH로 할 경우 21시는 09, 22시는 10으로 나타난다. 기간 검색할 시 주의

반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] 페이징 쿼리  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,