붓, 그리다
동의어(synonym) ★ 본문
Q9. [동의어(synonym)] ★★★
- 단어는 다르지만 의미를 같은 것(별칭, 별명(사람))
- 동의어는 테이블에 부여(테이블은 하나인데 테이블을 부르는 이름이 2개)
-> 테이블을 복사하면 서로 다른 테이블
- 사용권한과 연관
형식)
create synonym 동의어이름 for 대상객채명(=테이블명)
EX1) 동의어 만들기
SQL> create synonym busor for b_dept2;
동의어가 생성되었습니다.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
BUSOR SYNONYM
B_DEPT2 TABLE
B_EMP2 TABLE
B_EMP3 TABLE
SQL> select * from busor;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
7 개의 행이 선택되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
7 개의 행이 선택되었습니다.
-> 같은 테이블이기에 같은 데이터가 나타남
EX2) 동의어로 데이터 삽입하기
SQL> insert into busor values(80,'TEXTING3','SEOUL');
1 개의 행이 만들어졌습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
80 TEXTING3 SEOUL
8 개의 행이 선택되었습니다.
-> 동의어로 입력한 데이터가 나오는 것을 보아, 같은 테이블임을 알 수 있다.
-> 즉, 하나의 테이블에 두개의 이름이 있다는 것
Q10. 동의어를 왜 만드는가?
- 사용권한과 연관이 있다.
-> 서로 다른 계정에서 특정 계정의 테이블을 사용할 수 있는가?
[동의어의 종류]
1) 개인용(private synonym)
- 각 계정별로 따로따로 만드는 경우
- 자기 계정만 사용이 가능
2) 공용(public synonym)
- 관리자만 만드는 경우
- 모든 계정들이 사용할 수 있는 동의어를 만드는 경우
-> 다른 계정이 가지고 있는 테이블을 DML하려면 사용권한을 인증 받아야 한다.
[ 개인용(private synonym) 동의어 ]
ex) 사용자 test01이 scott이 권한을 가진 테이블(emp, b_dept2,,)을 사용(insert, update, delete)하고 싶을 때
1) test01 로그인
SQL> conn test01/t1234
연결되었습니다.
SQL> select * from b_dept2;
select * from b_dept2
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
-> 각 계정별로 만든 테이블은 다른 계정의 사용자가 사용할 수 없다.
-> 다른 계정이 가지고 있는 테이블을 DML할려면 사용권한을 인증 받아야한다.(DCL)
-> owner(소유주)가 권한을 줄수 있고 회수할 수도 있다. (grant or revoke)
*객체 권한 DCL문 형식)
grant 권한종류명,,(insert,update,delete, or all)
on 적용 테이블명
to 부여를 받을 계정명1, 계정명2,,,(to public, 모든계정)
2) scott 로그인, 사용권한 부여(DCL)
SQL> conn scott/tiger
연결되었습니다.
SQL> show user
USER은 "SCOTT"입니다
SQL> grant insert, select
2 on b_dept2
3 to test01;
권한이 부여되었습니다.
3) test01 재 로그인 후 테이블 확인
SQL> conn test01/t1234
연결되었습니다.
SQL> show user
USER은 "TEST01"입니다
SQL> select * from b_dept2;
select * from b_dept2
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
-> 그냥 테이블명만 삽입하면 인식이 안됨
-> 소유자명.테이블명을 설정해야함
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1* select * from scott.b_dept2
SQL> /
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
80 TEXTING3 SEOUL
8 개의 행이 선택되었습니다.
-> 권한을 부여받아도 소유자명을 반드기 기입해야하기 때문에 사용할 때마다 불편.
-> 사용자가 기입하기 편하게 동의어를 사용
4) test01이 자신이 사용하는 동의어 만들기
SQL> create synonym busor2 for scott.b_dept2;
동의어가 생성되었습니다.
SQL> select * from busor2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
80 TEXTING3 SEOUL
8 개의 행이 선택되었습니다.
5) test01에서 insert
SQL> insert into busor2 values(90,'TESINT4','SUWON');
1 개의 행이 만들어졌습니다.
SQL> select * from busor2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
80 TEXTING3 SEOUL
90 TESINT4 SUWON
9 개의 행이 선택되었습니다.
*동의어를 사용하는 목적은
- 다른 계정이 소유한 테이블을 데이터 작업(DML)할 때, 항상 소유자명.테이블명을 기입해야한다.
-> 이것은 편리하게 자기만의 이름으로 변경해서 사용하고자 할 때 쓰는 오라클 객체
Q11. [ 공용(public synonym) 동의어 ]
ex) test01 이외에 다른 사용자(test2,test3)가 DML하려면
-> 그들에게 소유자(scott)가 권한을 부여하고 다른 사용자들이 개인 동의어를 만들어야한다.
-> 관리자가 모든 계정이 전부 사용이 가능한 동의어를 생성, 권한은 소유자가 부여해줘야함
공용동의어 형식)
create public synonym 동의어 이름 for 대상객체명
1) 관리자 로그인. 동의어 생성하기
SQL> create public synonym butest for scott.b_dept2;
동의어가 생성되었습니다.
2) test01 로그인
SQL> conn test01/t1234
연결되었습니다.
SQL> select * from butest;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
80 TEXTING3 SEOUL
90 TESINT4 SUWON
9 개의 행이 선택되었습니다.
-> 관리자가 만든 공용 동의어로 사용이 가능
3) 다른 사용자 test1 로그인
SQL> conn test1/t1234
연결되었습니다.
SQL> select * from butest;
select * from butest
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
-> 소유자(scott)가 권한을 부여해주지 않음
SQL> conn scott/tiger
연결되었습니다.
SQL> grant select
2 on b_dept2
3 to test1;
권한이 부여되었습니다.
-> 소유자(scott)이 test1에게 권한 부여
SQL> conn test1/t1234
연결되었습니다.
SQL> select * from butest;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
70 TESTING2 BUSAN
80 TEXTING3 SEOUL
90 TESINT4 SUWON
9 개의 행이 선택되었습니다.
-> 관리자가 부여한 공용동의어로 scott.b_dept2 테이블을 불러올 수 있음
- select * from tab : 공용동의어
Q12. [ 권한 회수 ]
형식)
revoke 회수할 권한종류,,(insert,select,,all)
on 적용 테이블명
from 회수할 계정명1, 계정명2,, (public)
EX1) scott 계정이 b_detp2테이블에 대한 권한(insert, select)를 test01한테서 회수하기
1) 권한 회수
SQL> conn scott/tiger
연결되었습니다.
SQL> revoke insert, select
2 on b_dept2
3 from test01;
권한이 취소되었습니다.
2) 회수된 권한 확인
SQL> conn test01/t1234
연결되었습니다.
SQL> select * from busor2; // 개인이 만든 동의어
select * from busor2
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
SQL> select * from butest; // 관리자가 만든 동의어
select * from butest
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
SQL> select * from scott.b_dept2;
select * from scott.b_dept2
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
-> 권한이 없어 동의어도 테이블명으로도 조회가 안됨
Q13. 불필요한 동의어 삭제하기
drop synonym 삭제할 동의어 이름
1) 개인 동의어 busor2, buser2 삭제
SQL> drop synonym busor2;
동의어가 삭제되었습니다.
SQL> drop synonym buser2;
동의어가 삭제되었습니다.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
B_PRTEST TABLE
DEPT TABLE
PRTEST TABLE
SAMPLE TABLE
SAWON TABLE
*butest는 관리자만이 삭제 가능
'Oracle' 카테고리의 다른 글
사용권한 : 객체 권한 (0) | 2017.06.16 |
---|---|
사용권한 : 시스템 권한(Lock, Role) (0) | 2017.06.16 |
인덱스, 시퀀스 (0) | 2017.06.16 |
TCL 트랜잭션(commit, rollback, savepoint) (1) | 2017.06.16 |
뷰 veiw 생성/삭제/수정 (0) | 2017.06.16 |
Comments