본문 바로가기

DataBase/Oracle

시노님(SYNONYM) 이란?

시노님(SYNONYM) 이란?
데이터베이스 객체에 대한 소유권은 해당 객체를 생성한 사용자가 가진다. 따라서 다른 사용자가 소유한 객체에 접근하기 위해서는 소유자로부터 접근권한을 부여 받아야 한다.
그리고 다른 사용자가 소유한 객체를 조회할 때에는 소유자의 ID를 객체 이름 앞에 지정해야 한다.
예를 들어, emp 테이블의 소유자가 scott이고, 어떤 사용자가 scott로부터 접근권한을 부여 받아 emp 테이블을 조회하려면 scott.emp와 같이 소유자 ID를 테이블 이름 앞에 지정해야 한다.

하지만 객체를 조회할 때마다 객체의 소유자를 일일이 지정하는 방법은 매우 번거로운 일이다.
시노님은 하나의 객체에 대해 다른 이름을 정의하는 방법이다.

예를 들어, scott 소유의 scott.emp 테이블에 대해 arirnag이라는 동의어를 정의할 경우, 질의어에서 scott.emp라는 긴 이름 대신에 arirang라는 간단한 이름으로 scott.emp 테이블을 조회할 수 있다.
동의어는 SQL 문에서 사용하는 테이블이나 컬럼의 별명과 유사한 개념이다. 하지만 별명은 해당 SQL 문 내에서만 사용할 수 있지만, 시노님은 데이터베이스 전체에서 사용할 수 있는 객체이다.


시노님의 종류

private 시노님(개인 시노님)는 특정 schema에서 생성되고 단지 그것을 갖는 schema에 의해 접근할 수 있다.
public 시노님(공용 시노님)는 PUBLIC schema에 의해 소유되며 데이터베이스 내의 모든 schema는 그것을 참조한다.

종류 소유 접근
private 시노님 owner owner가 접근 제한
public 시노님 public schema 모든 사용자


시노님의 생성

시노님 생성도 다른 객체 생성과 마찬가지로 create 문을 사용하여 만든다.

【형식】
	CREATE [PUBLIC] SYNONYM [schema.]synonym명
  	FOR [schema.]object명;
• 디폴트는 private 시노님이다.
• PUBLIC 시노님은 모든 사용자가 접근 가능한 시노님을 생성한다.
• PUBLIC 시노님은 모든 사용자가 접근 가능하기 때문에 생성 및 삭제는 오직 DBA만이 할 수 있다.

그러므로 public 시노님의 생성은 다음과 같은 단계를 통해서만 생성할 수 있다.
PUBLIC 시노님의 생성 순서
1) SYSTEM 권한으로 접속한다.
2) PUBLIC 옵션을 사용하여 시노님을 생성한다.
3) 생성된 시노님에 대해 객체 소유자로 접속한다.
4) 시노님에 권한을 부여한다.

【예제】
SQL> conn system/manager as sysdba  ☜ DBA로 접속
Connected.
 
세션이 변경되었습니다.
 
SQL> create public synonym pub_test
  2  for kim.test;  ☜ kim.test에 대해 public 시노님(pub_test)을 생성
 
동의어가 생성되었습니다.
 
SQL> conn scott/tiger   ☜ 제3자인 scott로 접속
Connected.
 
세션이 변경되었습니다.
 
SQL> select * from pub_test; ☜ public 시노님(pub_test)에 대해 DML 시도가 거부됨
select * from pub_test
              *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
 
 
SQL> conn kim/gun   ☜ 원래 객체의 소유자로 접속
Connected.
 
세션이 변경되었습니다.
 
SQL> grant select on test to public;   ☜ test 테이블을 public으로 select권한을 부여함
 
권한이 부여되었습니다.
 
SQL> conn scott/tiger   ☜ 제3자 scott로 접속
Connected.
 
세션이 변경되었습니다.
 
SQL> select * from pub_test;   ☜ public 시노님에 접근이 가능
 
        ID NAME
---------- ----------
1234567890 조아라
1212121212 행복해
 
SQL> 

시노님의 삭제

• private 시노님은 생성자 스스로 삭제할 수 있다.
• public 시노님은 DBA만이 삭제할 수 있다.(public 시노님 생성과 삭제는 DBA만 가능)

【형식】
	DROP [PUBLIC] SYNONYM synonym명;
【예제】
SQL> conn system/manager as sysdba
Connected.
 
세션이 변경되었습니다.
 
SQL> drop public synonym pub_test;
 
동의어가 삭제되었습니다.
 
SQL>


【예제】 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- EMP TABLE EMPLOYEES TABLE SQL> CREATE SYNONYM bb FOR jijoe.emp; Synonym created. SQL> select * from user_synonyms; SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK ---------------- --------------- --------------- --------------- BB JIJOE EMP SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- BB SYNONYM EMP TABLE EMPLOYEES TABLE SQL> select * from bb; ID NAME SALARY BONUS ---------- ---------- ---------- ---------- 1101 Cho 250 125 1102 Joe 240 100 1103 kim 250 100 1104 jijoe 220 100 SQL> select * from emp; ID NAME SALARY BONUS ---------- ---------- ---------- ---------- 1101 Cho 250 125 1102 Joe 240 100 1103 kim 250 100 1104 jijoe 220 100 SQL> drop synonym bb; Synonym dropped. SQL>

시노님 정보조회

all_synonyms 모든 시노님 정보
user_synonyms 사용자가 만든 시노님 정보
SQL> select count(*) from all_synonyms;
 
  COUNT(*)
----------
     20005
 
SQL> select * from user_synonyms;
 
no rows selected
 
SQL>

출처 : http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/synonym.html

'DataBase > Oracle' 카테고리의 다른 글

HINT관련설명  (0) 2008.10.06
일수구하는쿼리...  (0) 2008.09.30
작업 진행율  (0) 2008.08.08
[펌]XMLTYPE 기본 사용 예  (0) 2008.08.08
[펌]with문을 활용하자  (0) 2008.08.08