usop
2022. 12. 12. 17:47
동의어
- 하나의 객체에 대해 다른 이름을 정의하는 방법
동의어의 필요성
- 데이터 베이스 객체의 소유권은 해당 객체를 생성한 사용자에게 있으며 다른 사용자가 소유한 객체를
조회할 때에는 소유자의 아이디를 객체 이름 앞에 첨부해야 한다.
객체를 조회할 때마다 객체의 소유자를 일일이 지정하는 방법은 매우 번거로우므로 이런 번거로움을 최소화
하기 위해 주로 동의어를 사용
동의어와 별명(Alias)의 차이점
- 동의어는 데이터베이스 전체에서 사용할 수 있는 객체, 별명은 해당 SQL 명령문에서만 사용
동의어 생성
- 개별 사용자를 대상으로 한 전용 동의어, 전체 사용자를 대상으로 한 공용 동의어 존재
동의어의 종류
- 전용 동의어 (private synonym) :
객체에 대한 접근 권한을 부여 받은 사용자가 정의한 동의어로 해당 사용자만 사용
- 공용 동의어 (public synonym) :
권한을 주는 사용자가 정의한 동의어로 누구나 사용
DBA 권한을 가진 사용자만 생성 ( 예: 데이터 딕셔너리 )
전용 동의어 생성 예
-- 전용 동의어 생성 예 (시스템 접속)
-- system 사용자 소유의 project 테이블에 my_project 전용 동의어를 생성해보자
CREATE TABLE project(
project_id number(5)
constraint pro_id_pk PRIMARY KEY,
project_name varchar2(100),
studno number(5),
profno number(5));
insert into project values(12345, 'portfolio', 10101, 9901);
commit;
select * from project;
grant select on project TO scott;
--scott 접속
--소유자 지정 없이 project 테이블을 조회하면 오류가 발생
select * from project;
select * from system.project;
-- my project 전용 동의어 생성
CREATE SYNONYM my_project FOR system.project;
--전용 동의어에 의해 system 소유의 project 테이블을 조회한다.
select * from my_project;
--공용 동의어 생성 (시스템 접속)
CREATE PUBLIC SYNONYM pub_project FOR project;
--scott 접속
select * from pub_project;
동의어 삭제
DROP SYNONYM 명령문 사용
공용동의어는 DROP PUBLIC SYNONYM 으로 삭제 가능
동의어 삭제 예시
-- 동의어 삭제
DROP SYNONYM my_project;
--공용 동의어는 DROP SYNONYM 으로 삭제가 불가능하다
DROP SYNONYM pub_project;
--공용 동의어는 DROP PUBLIC SYNONYM 으로 삭제 가능
DROP PUBLIC SYNONYM pub_project;