Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

동의어(synonym) ★ 본문

Oracle

동의어(synonym) ★

붓그린 2017. 6. 16. 16:56
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