DB/Oracle

SYNONYM

p3chaeyeon 2024. 8. 20. 20:20

SYNONYM 개념

  • 오라클 객체(테이블, , 시퀀스, 프로시저)에 대한 대체 이름(Alias)
  • Synonym Object가 아니라 Object에 대한 직접적인 참조이다
  • 데이터베이스의 투명성을 제공하기 위해서 사용 한다
  • 다른 유저의 객체를 참조할 때 많이 사용 한다
  • 객체의 긴 이름을 짧게 만들어 SQL 코딩을 단순화 할 수 있다
  • 객체의 실제 이름, 소유자, 위치를 감추기 때문에 데이터베이스의 보안을 유지할 수 있다

 

 

SYNONYM 종류

  • Private Synonym : 전용 Synonym은 특정 사용자만 사용 가능
  • Public Synonym : 공용 Synonym은 사용자 그룹이 소유하면 그 데이터베이스에 있는 모든 사용자가 공유

 

 

SYNONYM 형식

CREATE [PUBLIC] SYNONYM 시노님이름 FOR 객체이름

 

 

실습

1. HR 계정으로 접속해서 C##JAVA 계정에게 EMPLOYEES 테이블을 조작할 수 있는 권한 부여

HR 계정에서 실습

grant all on employees to c##java;

 

 

2. C##JAVA 계정에 접속해서 Synonym(동의어)를 생성

hr계정의 employees 테이블을 java계정에서 hr_emp 동의어로 사용한다

CREATE SYNONYM Synonym이름 FOR 다른 계정의 테이블명

 

C##JAVA 계정에서 실습

create synonym hr_emp for hr.employees;

명령의 1 행에서 시작하는 중 오류 발생 -

create synonym hr_emp for hr.employees

오류 보고 -

ORA-01031: 권한이 불충분합니다

01031. 00000 -  "insufficient privileges"

*Cause:    An attempt was made to perform a database operation without

           the necessary privileges.

*Action:   Ask your database administrator or designated security

           administrator to grant you the necessary privileges

 

먼저 SYNONYM를 생성할 수 있는 권한이 있어야 한다

SYSTEM 계정(관리자 계정)에서 권한을 부여한다

 

SYSTEM 계정에서 실습

grant create synonym to c##java;

 

다시 C##JAVA 계정에서

create synonym hr_emp for hr.employees;
select * from user_synonyms;

 

 

3. 쿼리

select * from hr.employees;

이런 식으로 사용하면 SQL문이 길어질 때 테이블명이 길어서 문제가 되고 다른 스키마(계정)에 있는

객체의 위치를 알려주게 되어 보안상 안 좋다

 

select * from hr_emp; -- Synonym 이용

Synonym 이름을 짧게 하여 SQL문 길이도 줄이고 보안유지도 되기 때문에 사용 한다

 

 

4. 삭제

DROP SYNONYM 시노님명
drop synonym hr_emp;

select * from user_synonyms; -- Synonym 동의어가 삭제된 것을 확인할 수 있다

 

 

문제

C##JAVA 계정에서 HR 계정의 DEPARTMENTS 테이블의 시노님(HR_DEP)을 생성하시오

 

HR 계정에서 C##JAVA 계정에 권한 부여

grant all on departments to c##java;

 

C##JAVA 계정에서 시노님 생성

create synonym hr_dep for hrdepartments;

 

시노님 생성 확인

select * from user_synonyms;