-
SQL_SYNONYM 개요 & 테이블 접근 권한 설정Data Base_Oracle/SQL 2020. 1. 10. 16:23
SYNONYM 개요
SYNONYM(동의어) : 단어는 다르지만 의미가 같은 별칭
SYNONYM 사용 목적
- 일반적으로 오라클은 계정별로 다른 작업 테이블들을 가짐
계정 간의 테이블 공유를 위해 DCL로 권한을 부여해야 함 - 서로 다른 계정에서 특정 계정의 테이블을 사용하려고 할 때,
테이블명 앞에 소유자명을 작성해야하는데 그것이 불편하기 때문에
해당 테이블의 이름을 사용자가 쓰기 편한 이름으로 설정하기 위함
SYNONYM 특징
- 대상객체와 동일한 테이블에 접근 가능하도록 함
- 테이블은 하나이지만 이름이 2개가 됨
- 동의어를 사용해서 DML 작성 가능
- Oracle 객체
SYNONYM 종류
- Private Synonym : 개인용 동의어(전용 동의어), 각 계정별로 따로 만들어서 사용
ex) scott에서 생성한 개인용 동의어는 scott에서만 사용 가능 - 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 - 일반적으로 오라클은 계정별로 다른 작업 테이블들을 가짐