시노님 생성
CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명
FOR[스키마명.]객체명;
PUBLIC을 생략하면 PRIVATE 시노님이 만들어 진다. 참고로 PUBLIC 시노님은 DBA 권한이 있는 사용자만 생성 및 삭제가 가능하다. FOR절 이하의 객체에는 테이블, 뷰, 프로시저, 함수, 패키지, 시퀀스 등이 올 수 있다.
입력
CREATE OR REPLACE SYNONYM syn_channel
FOR channels;
결과
synonym SYN_CHANNEL이(가) 생성되었습니다.
channels 테이블에 대한 시노님이 만들어 졌으므로 어느 사용자나 ‘syn_channel’이라는 이름으로 channels 테이블 조회가 가능하다.
입력
SELECT COUNT(*)
FROM syn_channel;
결과
COUNT(*)
----------
5
다른 사용자로 로그인해서 앞서 만든 시노님을 참조해 보자. 오라클을 설치할 때 자동으로 생성되는 사용자 중 HR 사용자가 있는데 디폴트로 계정이 잠겨 있으므로,먼저 잠긴 계정을 풀고 비밀번호도 HR로 설정해 보자.
입력
ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK;
결과
user HR이(가) 변경되었습니다.
이제 HR 사용자로 로그인해서, syn_channel을 조회해 보자.
입력
SELECT COUNT(*)
FROM ora_user.syn_channel;
결과
SQL 오류: ORA-00942: 테이블 또는 뷰가 존재하지 않습니다.
왜 오류가 난 것일까? 권한이 없어서 그렇다. HR 사용자에게 SELECT 권한을 주면 된다. 다시 ora_user로 접속해 권한을 주고, 다시 조회해 보자.
입력
GRANT SELECT ON syn_channel TO HR;
결과
GRANT을(를) 성공했습니다.
입력
SELECT COUNT(*)
FROM ora_user.syn_channel;
결과
COUNT(*)
----------
5
이번엔 PUBLIC 시노님을 생성해 보자.
입력
CREATE OR REPLACE PUBLIC SYNONYM syn_channel2
FOR channels;
결과
public synonym SYN_CHANNEL2이(가) 생성되었습니다.
만들어진 시노님의 조회 권한을 PUBLIC에 준다.
입력
GRANT SELECT ON syn_channel2 TO PUBLIC;
결과
GRANT을(를) 성공했습니다.
HR 사용자로 로그인해 조회해 보자.
입력
SELECT COUNT(*)
FROM syn_channel2;
결과
COUNT(*)
----------
5
PUBLIC 시노님은 소유자명을 붙이지 않아도 참조가 가능한데, 그 이유는 해당 시노님의 소유자가 시노님을 만든 ora_user가 아닌 PUBLIC이 되기 때문이다. 생성된 시노님 정보는 PRIVATE은 USER_SYNONYMS, PUBLIC까지 보려면 ALL_SYNONYMS를 참조하면 된다.
시노님을 사용하는 이유를 정리해 보면 다음과 같다.
❶ 데이터베이스의 투명성을 제공하기 위해서 사용한다. 다른 사용자의 객체를 참조할 때 많이 사용한다.
❷ 일단 시노님을 생성해 놓으면 나중에 이 시노님이 참조하고 있는 객체의 이름이 바뀌더라도 이전에 작성해 놨던 SQL문을 수정할 필요가 없다.
❸ 시노님은 별칭이므로 원 객체를 숨길 수 있어 보안 측면에서 유리하다. PRIVATE 시노님은 다른 사용자가 참조할 때 소유자명.시노님명 형태로 사용하지만, PUBLIC은 소유자명까지 숨길 수 있다.