본문 바로가기
Oracle/Index, Sequence, Synonym

데이터 베이스_ 오라클 [동의어, Synonym] 공용 동의어, 동의어 삭제

by Super Santj 2019. 7. 4.

공용동의어란 관리자가 만들어주고, 모든 계정이 다 사용이 가능한 동의어가 공용 동의어 이다.

우선 관리자로 오라클에 로그인을 한다.

SQL> conn sys/sys12345 as sysdba        (롤(role))
연결되었습니다.

생성 형식_ 

create [public] synonym 동의어 for 대상 객체(소유자명.테이블명) //[] 대괄호는 옵션 사항임

SQL> create public synonym butest for scott.b_dept2;

동의어가 생성되었습니다.

이렇게 생성할수가 있다. butest 라는 동의어를 만들었고 public 문을 사용하여 모두가 사용할수있는 공용 동의어를 생성하게되었다. 여기서 모두가 라는 의미는 모든 유저를 뜻한다. test 계정으로 로그인하여 사용이 가능한지 한번 확인해보자.

SQL> conn test/t1234
연결되었습니다.

로그인후 butest 공용 동의어를 호출한다면

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 TESTING3       TESTLOC

8 개의 행이 선택되었습니다.

이렇게 호출이 된다. 위와같이 공용동의어를 사용하면 된다.

문제_

scott계정이 b_dept2 테이블에 대한 권한(insert,select)을 test 계정에게 부여했던 권한을 다시 회수를 한다면?

권한부여(grant)<----->권한회수(=몰수)

형식_

revoke 회수할 권한종류,,, on 적용 테이블명 from 계정명,,,

문제해설_

우선 권한을 소유하고있는 scott 계정으로 로그인

SQL> conn scott/tiger
연결되었습니다.

형식에 맞게 구문을 작성한다면 아래와 같은 결과를 볼수가있다.

SQL> revoke select,insert on b_dept2 from test;

권한이 취소되었습니다.

그리고 다시 test계정으로 로그인하여 확인

SQL> conn test/t1234
연결되었습니다.
SQL> select * from buser2;
select * from buser2
              *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

SQL> select * from butest;
select * from butest
              *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

이렇게 해당 테이블(b_dept2)에 대한 모든 동의어를 사용할수있는 권한이 모두 사라졌다는것을 확인할수가 있다.

===============================================================

문제2_

불필요한 동의어를 삭제 하려면?

형식_

drop synonym 삭제시킬동의어

실행결과_

SQL> drop synonym buser2;

동의어가 삭제되었습니다.

SQL> drop synonym butest;
drop synonym butest
             *
1행에 오류:
ORA-01434: 삭제할 비공개 동의어가 존재하지 않습니다

여기서 삭제는 create 동의어를 할수있는 사람만이 삭제까지 할수가 있는것이므로 동의어 또는 권한을 부여받았다 하더라도 아무나 삭제할수있는 것은 아니다.

 

댓글