시노님 생성

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

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