[ 동의어 목차 ]
1. 동의어의 개념과 종류
2. 동의어 생성 및 제거
[ 1 ] 동의어의 개념과 종류
- 데이터베이스의 객체에 대한 소유권은 해당 객체를 생성한 사용자에게 있다.
따라서 다른 사용자가 객체에 접근하기 위해서는 소유자로부터 접근 권한을
부여받아야 한다.
또한 다른 사용자가 소유한 객체에 접근하기 위해서는 소유자의 이름을 객체
앞에 지정해야 한다.
- 이렇게 객체를 조회할 때마다 일일이 객체의 소유자를 지정하는 것이
번거로울 경우, 동의어를 정의하면 긴 이름대신 간단한 이름만으로
접근이 가능하다.
- 동의어는 개별 사용자를 대상으로 하는 비공개 동의어와
전체 사용자를 대상으로 한 공개 동의어가 있다.
1) 비공개 동의어
: 객체에 대한 접근 권한을 부여받은 사용자가 정의한 동의어,
해당 사용자만 사용할 수 있다.
2) 공개 동의어
: 권한을 주는 사용자가 정의한 동의어,
누구나 사용 가능하다,
공개 동의어는 DBA 권한을 가진 사용자만이 생성할 수 있다,
SYNONYM 앞에 PUBLIC를 붙여서 정의한다.
-- 다른 사용자가 객체에 접근하려면 소유자의 이름을 객체 앞에 지정해야 한다.
SELECT * FROM SCOTT.EMP; -- 여기서 SCOTT은 스키마
-- DUAL이 공개 동의어로 지정되어 있다.
SELECT * FROM SYS.DUAL;
SELECR * FROM DUAL;
-- 아래 쉅 내용 코드 --
-- SCOTT 계정에서
SELECT * FROM DUAL;
SELECT * FROM SYS.DUAL;
-- 원래는 이렇게 스키마이름.접근할객체 이렇게 코드를 적어야하는데
-- 위에서처럼 그냥 접근할객체 이름만 적어서 접근을 할 수가 있다.
-- 저 DUAL이 공개 동의어로 지정되어 있어서 저렇게 DUAL만 적어도 접근할수가 있는 것이다.
* 원래는 SYS.DUAL처럼 스키마이름.접근할객체이름 이렇게 코드를 적어야
접근이 가능해서 출력이 되는데,
DUAL이 공개 동의어로 지정되어 있어서 맨 위의 사진처럼 그냥 DUAL만
적어서 코드 실행해도 SYS.DUAL 실행한것과 같이 똑같은 결과를 도출해낸다.
[ 2 ] 동의어 생성 및 제거
- synonym_name
: user_name.object_name 에 대한 별칭
- user_name
: 객체를 소요한 오라클 사용자
- object_name
: 동의어를 만들려는 데이터베이스 객체 이름
-- 형식
CREATE [PUBLIC] SYNONYM synonym_name
FOR user_name.object_name;
[ 실습 : 테이블 생성 후 객체 권한 부여하기 ]
- SYSTEM 사용자 계정으로 접속해서 테이블을 생성한 후 이를 SCOTT 사용자가 사용할 수 있도록 권한을 부여해보자.
CONN system/manager
SHOW USER
DROP TABLE SYSTBL;
CREATE TABLE SYSTBL(
ENAME VARCHAR2(20)
);
INSERT INTO SYSTBL VALUES ('전수빈');
INSERT INTO SYSTBL VALUES ('전원지');
GRANT SELECT ON SYSTBL TO SCOTT;
CONN scott/tiger
SELECT * FROM SYSTBL;
SELECT * FROM system.SYSTBL;
-- 아래 쉅 내용 코드 --
-- SYSTEM 계정에서
-- 동의어 생성 및 제거
DROP TABLE SYSTBL;
CREATE TABLE SYSTBL(
ENAME VARCHAR2(20)
);
INSERT INTO SYSTBL VALUES('전수빈');
SELECT * FROM SYSTBL;
-- 객체 권한 부여
GRANT SELECT ON SYSTBL TO SCOTT; -- SCOTT 계정에게 SYSTBL 접근할 수 있는 권한 부여해줌
GRANT CREATE SYNONYM TO SCOTT; -- SCOTT 계정에게 동의어 만들 수 있는 권한 부여해줌
[ 실습 : 동의어 생성하기 ]
CONN SCOTT/TIGER
CREATE SYNONYM PRISYSTBL FOR SYSTEM.SYSTBL;
SELECT * FROM PRISYSTBL;
CONN SYSTEM/MANAGER
GRANT CREATE SYNONYM TO SCOTT;
CONN SCOTT/TIGER
CREATE SYNONYM PRISYSTBL FOR SYSTEM.SYSTBL;
SELECT * FROM PRISYSTBL;
-- 아래 쉅 내용 코드 --
--SCOTT계정에서
-- 동의어 생성하기
CREATE SYNONYM SYSTBL FOR SYSTEM.SYSTBL;
-- SYSTEM 계정에서 SCOTT 계정에게 CREATE SYNONYM 권한을 부여해주고 나니
-- 위의 코드처럼 SYSTEM.SYSTBL에 대한 동의어 SYSTBL을 만들 수 있게 되었다.
SELECT * FROM SYSTBL;
-- CREATE SYNONYM 하고 다시 SELECT * FROM SYSTBL;을 하니 이제는 실행이 된다!
* 원래는 SCOTT 계정에서 SELECT * FROM SYSTBL; 코드도
SELECT * FROM SYSTEM.SYSTBL; 코드도 실행이 안되었다.
SYSTEM 계정에서 SCOTT계정에게
GRANT SELECT ON SYSTBL TO SCOTT; 으로 SYSTBL에
접근할 수 있도록 권한을 부여해주니깐
SELECT * FROM SYSTEM.SYSTBL; 코드가 실행이 되었다.
하지만 이때까지만해도 SELECT * FROM SYSTBL; 코드는
실행이 불가했다. 이 코드가 실행이 되려면
동의어를 만들어줘야만 가능하다. 그래서 SCOTT계정이
동의어 만들 수 있게 SYSTEM 계정에서
GRANT CREATE SYNONYM TO SCOTT; 코드 실행해서
동의어 만들 수 있는 권한 부여해주고 그러고
SCOTT 계정에서 CREATE SYNONYM SYSTBL FOR SYSTEM.SYSTBL;
코드 실행해서 동의어 만들고 나니 그제서야
SELECT * FROM SYSTBL; 코드가 실행이 되면서 결과가
위의 사진과 같이 출력이 된것이다.
'DataBase' 카테고리의 다른 글
21_ 저장 프로시저, 저장함수, 커서, 트리거 (0) | 2022.12.21 |
---|---|
20_PL/SQL 기초 (4) | 2022.12.21 |
18_데이터베이스 롤 권한 제어 (0) | 2022.12.20 |
17_사용자 관리 (0) | 2022.12.20 |
16_인덱스 (0) | 2022.12.20 |