더북(TheBook)

시노님 생성

    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은 소유자명까지 숨길 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.