bameh 2020. 4. 23. 15:17

동의어 SYNONYM

다른 DB가 가진 객체에 대한 별명 혹은 줄임말

여러 사용자가 테이블을 공유할 경우, 다른 사용자가 테이블에 접근할 때 '사용자명.테이블명'으로 표현함

이 때 동의어를 사용하면 간단하게 사용 가능하다.

 

동의어 구분

- 비공개 동의어: 객체에 대한 접근 권한을 부여받은 사용자가 정의한 동의어로 해당 사용자만 사용 가능함

- 공개 동의어: 모든 권한을 주는 사용자(DBA)가 정의한 동의어로 모든 사용자가 사용할 수 있음(PUBLIC), (EX.DUAL)

 

1. SYNONYM 생성 방법(비공개 동의어)- 사용자 계정에서 만드는 방법

 

[표현식]

CREATE SYNONYM 별명(줄임말)

FOR 사용자명.객체명;

 

#1_ SELECT 권한을 부여받아야함

[SAMPLE 계정]

SELECT * FROM KH.EMPLOYEE;

< 오류 발생: SELECT 권한 없음

< SYSTEM 계정에서 SELECT 권한을 부여받아야 한다.

 

CREATE SYNONYM EMP FOR KH.EMPLOYEE; < KH.EMPLOYEE의 별명을 EMP로 지정함
SELECT * FROM EMP;

< SAMPLE 계정에서만 동의어 사용이 가능하다.

 

[SYSTEM 계정]

- KH.EMPLOYEE SELECT 권한 부여

GRANT SELECT
ON KH.EMPLOYEE TO SAMPLE;

- SYNONYM 생성 권한 부여

GRANT CREATE SYNONYM
TO SAMPLE;

 

 

2. SYNONYM 생성 방법(공개 동의어)- 시스템 계정에서 만드는 방법

[표현식]

CREATE PUBLIC SYNONYM 별명(줄임말)

FOR 사용자명.객체명;

 

#1_ 시스템에서 공개 동의어를 만든 뒤 SAMPLE 계정에서도 접근이 가능한지 테스트

 

[SYSTEM 계정]

- 공개 동의어 만들기

CREATE PUBLIC SYNONYM DEPT FOR KH.DEPARTMENT;

SELECT * FROM KH.DEPARTMENT;
SELECT * FROM DEPT;

- SAMPLE 계정에 SELECT 권한 부여

GRANT SELECT
ON KH.DEPARTMENT
TO SAMPLE;

[SAMPLE 계정]

SELECT * FROM DEPT;

> 오류 발생: 공개 동의어지만 해당 테이블 조회 권한이 없어서 오류 발생

 

 

3. SYNONYM 삭제

 

[SYSTEM 계정]

DROP PUBLIC SYNONYM DEPT;

SELECT * FROM DEPT;

< 공개 동의어 삭제는 SYSTEM 계정에서만 삭제할 수 있다.

 

[SAMPLE 계정]

DROP SYNONYM EMP;

SELECT * FROM EMP;