조회 수 18650 추천 수 0 댓글 0

(8I) 특정 테이블을 제외(SKIP)하고 EXPORT 하는 방법
====================================

PURPOSE
--------
Fine-Grained Access (FGAC) control이 특정 테이블을 제외하고 Export하는데
사용이 되는데 여기서는 FGAC에 대한 설명은 하지 않을것이며 자세한 사항은 관련
문서들을 참고하기 바란다.

Explanation & Example
----------------------
이 방법은 FGAC을 지원하는 Oracle Version에서만 가능하다. Oracle 8i에서부터
FGAC을 지원하며 Standard Edition을 제외한 Enterprise Edition 과 Personal
Edition에서 지원한다.
아래는 Scott User에서 EMP,DEPT 테이블을 제외하고 export받는 예제이다.

1. SYSTEM user로 database에 접속한다.

SQL> connect system/manager
Connected.

2. 새로운 DBA user를 만든다. 이 User로 export을 받을 것이다.

SQL> Create user EXP_DB identified by EXP_DB;

User created.

( default tablespace가 필요하다면 명시한다.)

SQL> Grant DBA to EXP_DB;

Grant succeeded.

3. Fine-Grained Access Control.

3.1. 2에서 만든 EXP_DB user로 접속한다.

SQL> connect exp_db/exp_db
Connected.

3.2 predicate function을 만든다.

CREATE or REPLACE FUNCTION exclude_table
(obj_schema VARCHAR2, obj_name VARCHAR2)
RETURN VARCHAR2 IS d_predicate VARCHAR2(2000);

BEGIN
if sys_context ('USERENV', 'SESSION_USER') = 'EXP_DB' THEN
d_predicate := '1=2';
else
d_predicate := '';
end if;
RETURN d_predicate;
END exclude_table;
/

( 1=2 조건은 EXP_DB user에게 항상 어떤 row도 return하지 않도록 하기 위한 것이다)

3.2 EXPORT에서 제외하기를 TABLE에 대해 각각의 Policy를 만든다.

execute dbms_rls.add_policy ('SCOTT','EMP','POL_EMP','EXP_DB','EXCLUDE_TABLE')
execute dbms_rls.add_policy ('SCOTT','DEPT','POL_DEPT','EXP_DB','EXCLUDE_TABLE')

참고 : 'SCOTT' --> 제외하고자 하는 테이블의 Owner.
'EMP' --> 제외하고자 하는 테이블.
'POL_EMP' --> policy의 이름(임의).
'EXP_DB' --> predicate function의 Owner(3.2에서 만듬).
'EXCLUDE_TABLE' --> predicate function.

ex) 위와 같이 policy에 add하면 그때부터 EXP_DB user는 emp table을 query할때
어떤 row도 return하지 않는다.

SQL> execute dbms_rls.add_policy ('SCOTT','EMP','POL_EMP','EXP_DB','EXCLUDE_TABLE')

PL/SQL procedure successfully completed.

SQL> select * from scott.emp;

no rows selected

SQL> execute dbms_rls.add_policy ('SCOTT','DEPT','POL_DEPT','EXP_DB','EXCLUDE_TABLE')

PL/SQL procedure successfully completed.

SQL> select * from scott.dept;

no rows selected

SQL> connect scott/tiger
Connected.
SQL> select count(*) from scott.emp;

COUNT(*)
----------
14

SQL> select count(*) from scott.dept;

COUNT(*)
----------
4


4. EXP_DB user로 database 또는 schema level로 export한다.

여기서 우리는 제외하고자 하는 각가의 테이블에서는 아래와 같은 warnings
을 발견할 것이다.

EXP-00079: Data in table "EMP" is protected. Conventional path may only be
exporting partial table.


ex) exp exp_db/exp_db file=scott.dmp owner=scott

. .
. .
. . exporting table CHESS_SAVE_CAPTURED 0 rows exported
. . exporting table CHESS_SAVE_PLAYER 0 rows exported
. . exporting table CITIES 205 rows exported
. . exporting table CLOB_TEST 1 rows exported
. . exporting table CODE 2 rows exported
. . exporting table COMPANY_SUMMARY 3 rows exported
. . exporting table CONCLASS 9 rows exported
. . exporting table CONLABEL 6 rows exported
. . exporting table CONTAINERS 169 rows exported
. . exporting table CREATE$JAVA$LOB$TABLE 1 rows exported
. . exporting table CUST 6 rows exported
. . exporting table CUSTOMER 9 rows exported
. . exporting table CUSTOMERS 14 rows exported
. . exporting table C_TEST1 8 rows exported
. . exporting table DAYS 7 rows exported
EXP-00079: Data in table "DEPT" is protected. Conventional path may only be expo
rting partial table.
. . exporting table DEPT 0 rows exported
. . exporting table DEPT2 4 rows exported
. . exporting table DTEST 0 rows exported
. . exporting table DUMMY 1 rows exported
EXP-00079: Data in table "EMP" is protected. Conventional path may only be expor
ting partial table.
. . exporting table EMP 0 rows exported
EXP-00091: Exporting questionable statistics.
. . exporting table EMP1 14 rows exported
. . exporting table EMPTEST 12 rows exported
. . exporting table EMP_UNRECOVER 15 rows exported
. . exporting table EMP_GQ1[ 26 rows exported
. . exporting table ESJO_DEPT 3 rows exported
. . exporting table EXECUTABLES 1 rows exported
. . exporting table FLRPEOPLE 65 rows exported
. . exporting table FUNDS 5 rows exported
. . exporting table FUND_CONTRIB 16 rows exported
. . exporting table
. .
. .
Export terminated successfully with warnings.


5. 제외하거나 다시 export list에 더하거나 할때.

5.1 다시 export list에 넣으려면

execute dbms_rls.drop_policy ('SCOTT','EMP','POL_EMP');

참고 : 'SCOTT' --> 제외하고자 했던 테이블의 Owner.
'EMP' --> 제외하고자 했던 테이블.
'POL_EMP' --> policy의 이름.

5.2 제외하고자 하는 table list에 있는지 알아보고자 할때는 DBA/USER/ALL_POLICIES
view을 이용한다.

SQL> select POLICY_NAME, OBJECT_NAME, FUNCTION
from DBA_POLICIES
where PF_OWNER='EXP_DB';

POLICY_NAME OBJECT_NAME
------------------------------ ------------------------------
FUNCTION
------------------------------
POL_DEPT DEPT
EXCLUDE_TABLE

POL_EMP EMP
EXCLUDE_TABLE


RELATED DOCUMENTS
-----------------
<Note 67977.1> Oracle8i Fine Grained Access Control - Working Examples


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84839
159 Tip TEMP TABLESPACE 사용현황 조회하기 1 고구마 2010.05.19 41828
158 TM windows에서 Opatch 진행시 oci.dll 에러 조치 1 이현정 2012.03.26 37401
157 Tip 핫백업 디비올리기 유주환 2010.04.09 34980
156 Tip UDP Buffer Tuning 기법 3 김준호 2010.05.04 30846
155 Tip 오라클 null값 정리 유주환 2010.04.18 29779
154 Tip (Diagnostics) Oracle10g DB 접속 안될때 sqlplus 에서 SYSTEMSTATE DUMP 받기 1 고구마 2011.05.18 28945
153 Tip shared pool wait event 2 file 유주환 2010.04.05 28881
152 Tip Log miner 사용방법 1 김준호 2010.04.06 28498
151 Tip em 실행시 에러 발생 조치 1 dbkill 2010.12.15 27289
150 Tip 오라클11g에서 SE1,SE,EE제품의 옵션비교입니다. file perfstat 2012.03.07 27004
149 TM audit 관련 2 이현정 2012.03.29 26485
148 TM check whether crs auto start is enable or disable 담벼락 2012.10.12 26263
147 Tip EM 재구성 고구마 2010.04.09 26211
146 Tip 10g standard edition과 enterprise edition의 차이점 2 윤현 2011.05.16 26011
145 Tip Buffer Cahe 관련 대기 이벤트들 고구마 2010.04.28 25621
144 TM 테이블과 인덱스의 관계 및 인덱스 종류 및 생성 방법. Tech1 2012.03.28 25499
143 Tip EXPORT/IMPORT 이용한 TABLE과 INDEX 분리하는 방법 고구마 2010.05.24 25428
142 Tip sysaux resize 유주환 2010.04.18 25269
141 Tip shared pool / library cache 고구마 2010.04.28 25066
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8