ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL_SYNONYM 개요 & 테이블 접근 권한 설정
    Data Base_Oracle/SQL 2020. 1. 10. 16:23

    SYNONYM 개요

    SYNONYM(동의어) : 단어는 다르지만 의미가 같은 별칭

    SYNONYM 사용 목적

    1. 일반적으로 오라클은 계정별로 다른 작업 테이블들을 가짐
      계정 간의 테이블 공유를 위해 DCL로 권한을 부여해야 함
    2. 서로 다른 계정에서 특정 계정의 테이블을 사용하려고 할 때,
      테이블명 앞에 소유자명을 작성해야하는데 그것이 불편하기 때문에
      해당 테이블의 이름을 사용자가 쓰기 편한 이름으로 설정하기 위함

    SYNONYM 특징

    • 대상객체와 동일한 테이블에 접근 가능하도록 함
    • 테이블은 하나이지만 이름이 2개가 됨
    • 동의어를 사용해서 DML 작성 가능
    • Oracle 객체

    SYNONYM 종류

    1. Private Synonym : 개인용 동의어(전용 동의어), 각 계정별로 따로 만들어서 사용
      ex) scott에서 생성한 개인용 동의어는 scott에서만 사용 가능
    2. Public Synonym : 관리자만 만들 수 있는 공용 동의어,
      특정 테이블에 대한 접근 권한이 있는 모든 계정에서 사용 가능
      ex) [ SQL> select * from tab; ] 에서
      tab이 각 계정에서 작업한 내용을 담고있는 테이블의 공용 동의어

    TABLE 접근 권한 부여

    § 형식

    [ SQL> grant 권한종류,,,(all) on 테이블명 to 계정명1, 계정명2,,,,(public) ; ]

     

    § 권한을 부여받은 계정에서 해당 테이블에 접근하기 위해서는
    { ~ 테이블 소유 계정명.테이블명 }으로 작성해야함

     

    ※ all : 모든 권한 부여
    insert : 테이블에 레코드를 입력할 수 있는 권한
    select : 테이블의 레코드를 조회할 수 있는 권한
    delete : 테이블의 레코드를 삭제할 수 있는 권한
    public : 모든 계정에 권한 부여

    # 예제

    { 에러 }
    ▷ test1 계정에서 b_dept2 테이블 조회
    [ SQL> select * from dept2;
    1행에 오류:
    ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 ]

     

    ※ test1 계정에는 b_dept2 테이블이 없고,
    다른 계정의 테이블을 조회하는 권한도 없기 때문에 발생하는 에러

     

    { 권한 부여 }
    ▶ table_owner인 scott이 test1 계정에 권한 부여
    [ SQL> grant insert, select on b_dept2 to test1;
    권한이 부여되었습니다. ]

     

    ※ 시스템 계정으로도 test1에 scott의 테이블을 수정할 권한을 줄 수 없음

     

    { 에러 }
    ▷ test1계정으로 돌아와서 b_dept2 확인
    [ SQL> select * from b_dept2;
    1행에 오류:
    ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 ]

     

    ※ 권한을 부여받았다고 해당 테이블을 그냥 사용할 수는 없고,
    소유자명.테이블명 으로 사용해야함

     

    ▶ test1 계정으로 다시 확인
    [ SQL> select * from scott.b_dept2; ]

    DEPTNO DNAME LOC
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTON

    { 동의어 생성 }
    ▶ test1 계정에서 b_dept2테이블에 동의어 생성
    [ SQL> create synonym buser2 for scott.b_dept2;
    동의어가 생성되었습니다. ]

     

    { 데이터 입력 }
    ▶ test1 계정에서 동의어를 사용해서 b_dept2테이블에 데이터 입력
    [ SQL> insert into buser2 values(50, 'TEST', 'SEOUL');
    1 개의 행이 만들어졌습니다.
    select * from buser2; ]

    DEPTNO DNAME LOC
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTON
    50 TEST SEOUL

    TABLE 접근 권한 회수

    § 형식

    [ SQL> revoke 권한종류,,, on 테이블명 from 계정명,,, ; ]

    # 예제

    ▶ scott계정에서 test1에게 부여했던 권한 회수
    [ SQL> revoke insert,select on b_dept2 from test1;
    권한이 취소되었습니다. ]

     

    { 에러 }
    ▷ test1 계정에서 b_dept2 테이블 확인
    [ SQL> select * from b_dept2;
    1행에 오류:
    ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 ]

     

    ※ 권한이 회수된 테이블에 더 이상 접근할 수 없기 때문에 발생하는 에러
    test1계정이 b_dept2에 생성한 buser2 동의어,
    sys계정이 생성한 butest 공용 동의어 모두 사용할 수 없게 됨


    동의어의 개요와 계정간 테이블 접근 권한 부여 / 회수 방법에 대해 알아보았습니다.

    동의어는 계정 권한과 연관이 깊기 때문에 두 개념을 정확히 파악하는 것이 좋겠습니다.

    'Data Base_Oracle > SQL' 카테고리의 다른 글

    SQL_PRIVILEGE 개요 & 계정 관리 (1)  (0) 2020.01.10
    SQL_SYNONYM 생성/삭제 & DATA DICTIONARY  (0) 2020.01.10
    SQL_SEQUENCE  (0) 2020.01.09
    SQL_INDEX  (0) 2020.01.09
    SQL_ROLLBACK & SAVEPOINT  (0) 2020.01.09

    댓글

Designed by Tistory.