본문 바로가기

데이터 사이언스 DataScience/Data Base 데이터베이스

[Oracle] 존재하지 않는 Object에 대해 Synonym을 만들 수 있다

1. Synonym (동의어)

Oracle DBMS는 Synonym을 통해 다양한 user가 동일한 object를 바라보고 사용할 수 있게 해준다.

 

예를 들어 권한 분리를 위해 아래와 같이 5종류의 계정을 생성했다고 할때 

SVC  :  서비스의 모든 OBJECT를 소유하는 owner 계정

SVCONL : 서비스의 ONLINE 프로그램에서 접속해 사용하는 계정

SVCBAT : 서비스의 BATCH 프로그램에서 접속해 사용하는 계정

SVCSEL : 서비스의 SELECT 권한만 부여한 계정

SVCDML : 서비스의 DML 권한을 부여한 계정

 

SVC.TABLE1 을 SYNONYM으로 아래 DDL을 통해 SYNONYM을 생성한다면 

CREATE PUBLIC SYNONYM TABLE1 FOR SVC.TABLE1;

모든 계정에서 SYNONYM을 통해 SVC.TABLE1 이 아니라 TABLE1 으로  접근 가능하다.

 

이는 SQL의 가독성을 확보해주기도 하고, 실제 OWNER를 숨길수도 있으며, 권한 관리를 용이하게 해주기도 한다.

 

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-SYNONYM.html

 

2. 존재하지 않는 Object에 대한 Synonym

DBA가 수행하는 자동화, 일반화하기 어려운 경우가 많다.

범용적으로 쓰이는 솔루션이라도 DB는 각 회사의 정책에 따라 Object 생성/관리를 다르게 하는 경우가 많고 

수십년을 DBA로 일해도 상황에 따라 처음 DDL 을 수행하는 경우가 생길 수 밖에 없다.

 

그래서 결국 손으로 스크립트를 작성하고 이 과정에서 오타가 발생할 수 있는데 

대부분의 DDL은 문법오류 발생으로 잘못된 스크립트를 인지할 수 있으나,

Synonym의 경우 존재하지 않는 Object에 대해서도 문법오류 없이 수행이 가능하다.

-- 만약 SVC.TABLE2가 존재하지 않더라도 아래 DDL은 문제 없이 수행된다.
CREATE PUBLIC SYNONYM TABLE1 FOR SVC.TABLE2;

 

 

당연히 스크립트를 작성할때 주의하고, 크로스 체크를 해야겠지만

Synonym의 DDL 작성시에 특히 주의해야한다.

 

출처 :

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-views-sequences-and-synonyms.html

 

Database Administrator’s Guide

You can create and manage views, sequences, and synonyms with Oracle Database.

docs.oracle.com

 

반응형