[SQL] SYNONYM

지미미·2023년 4월 24일
0

Oracle SQL Developer

목록 보기
10/15
post-thumbnail

시노님

데이터베이스 객체는 각자 고유한 이름이 있는데, 이 객체들에 대한 별칭, 동의어를 만드는 것이 바로 시노님이며 이 또한 데이터베이스 객체에 속한다.

  • PUBLIC 모든 사용자가 접근/사용 할 수 있다.
  • PRIVATE 특정 사용자만 접근/사용 할 수 있다.

시노님 생성

CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명
FOR[스키마명.]시노님명
  1. FOR절 이하의 객체에는 테이블, 뷰, 프로시저, 함수, 패키지, 시퀀스 등이 올 수 있다.
  2. PUBLIC을 생략하면 기본 PRIVATE이 설정된다.
  3. PUBLIC 시노님은 DBA 권한이 있는 사용자만 생성 및 삭제가 가능하다.
  4. PUBLIC 시노님은 소유자명을 붙이지 않아도 참조가 가능한데, 그 이유는 해당 시노님의 소유자가 시노님을 만든 ORA_USER가 아닌 PUBLIC이 되기 때문이다. 생성된 시노님 정보는 PRIVATE은 USER_SYNONYMS, PUBLIC까지 보려면 ALL_SYNONYMS를 참조하면 된다.
  • HR 사용자에게 SELECT 권한 부여
GRANT SELECT ON 시노님명 TO HR;
  • 생성된 시노님의 조회 권한을 PUBLIC에 부여
GRANT SELECT ON 시노님명 TO PUBLIC;
  • 접근 권한 부여
GRANT SELECT ON 시노님명 TO PUBLIC; 
혹은 
GRANT SELECT ON 시노님명 TO 사용자;
  • 접근 권한 회수
REVOKE SELECT ON REGIONS FROM JUNGANG;
REVOKE SELECT ON P_REGIONS FROM PUBLIC;

시노님 삭제

DROP [PUBLIC] SYNONYM [스키마명.]시노님명;
  1. PRIVATE 시노님을 제거할 때 DROP SYNONYM이나 DROP ANY SYNONYM 권한이 있어야하며,
  2. PUBLIC 시노님을 제거할 때는 DROP PUBLIC SYNONYM 권한이 있어야한다.
  3. PUBLIC 시노님을 제거할 때는 PUBLIC이라는 키워드를 명시해야한다.
  • 사용자가 가진 권한을 확인
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '사용자명';
  • HR계정의 테이블이 가진 권한을 확인
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'HR';
  • 사용자가 가진 역할을 확인
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '사용자명';

시노님을 사용하는 이유

  1. 데이터베이스의 투명성을 제공하기 위해서 사용한다. 다른 사용자의 객체를 참고할 때 많이 사용한다.
  2. 일단 시노님을 생성해 놓으면 나중에 이 시노님이 참조하고 있는 객체의 이름이 바뀌더라도 이전에 작성해놨던 SQL문을 수정할 필요가 없다.
  3. 시노님은 별칭이므로 원 객체를 숨길 수 있어 보안 측면에서 유리하다. PRIVATE 시노님은 다른 사용자가 참조할 대 소유자명.시노님을 형태로 사용하지만, PUBLIC 소유자명까지 숨길 수 있다.
profile
블루라이트로 광합성 하는 새럼

0개의 댓글