select * from EMP;
위에 처럼 검색하고 싶은데
select * from TEST.EMP; 라고 검색해야
결과가 나오더라구요 ㅠㅠ
맨 첫 줄처럼 하고싶은데 어떻게 할 수 없을까요?
참고로 TEST는 소유자인것 같은데 ㅠㅠ
맨 첫 줄 처럼 검색하면
00942. 00000 - "table or view does not exist" ← 이런 오류 떠요 ㅠㅠ
참고로 11g에요!!!!
시노님, 동의어
create synonym aaa for x.aaa ;
grant select on aaa to k (다른 유저명);
하게되면 k 유저는 select * from aaa 로 접근할 수 있습니다.
글쓴이입니다!
우선 댓글 감사합니다.
Run SQL COmmand Line에서 grant select on TEST.EMP to SYS;라고 쳐서 해보고 있으나
you may not GRANT/REVOKE privileges to/from yourself 라는 오류가 뜨네요...
그런데 11g에 테이블이 엄청 많고 소유자명도 다 다른데
한 줄 한 줄 다 입력해야하는것인가요...??
Oracle SQL Developer에서 select 등등 쿼리문 작성(연습)하고 있어요 ㅠ
유저명 빼려면 시노님 만드시면 됩니다. 다만, 특정 목적을 가지고 만드는게 아니라 쿼리 연습용으로 모든 테이블에 시노님 건다는건 말이 안됩니다.
scott/tiger 의 scott.emp 테이블을 test 로 로긴하여 select * from emp ; 가 조회되도록 해보세요. 그러면 무슨 말씀인지 이해하실 수 있을 겁니다. 그리고 에러 내용은 sys 계정으로 로긴 한 상태에서 sys 계정에 grant 를 해서 나는 에러입니다.
오라클에서는 유저에 스키마들이 종속적입니다.
그러니까 A라는 테이블이 있으면 해당 테이블은 현재 로그인한 유저의 소유입니다.
window OS로 치자면...
C:\USERS\USER_A\TABLE_A 식으로 테이블이 존재합니다. USER_A로 로그인해서 TABLE_A를 찾으면 그냥 조회가 됩니다. 하지만 USER_A가 생략된거죠. 하지만 다른 유저라면 USER_A.TABLE_A 라고 해야 테이블을 찾을수 있는겁니다. 그러니까 다른 유저의 테이블일 경우 소유자(스키마)를 명기해야 합니다.
단지 synonyms 라고 alias처럼 각 유저가 개별적으로 허용된 객체에 대해서 축약어를 지정할수 있습니다. 그러니까 USER_B가 USER_A.TABLE_A를 앞으로 TABLE_A라고 부를거야라고 선언해 둘수 있는데 그 선언하는걸 synonyms라고 부르고 미리 등록해두면 등록한 다음부터 등록한 축약어로 접근이 가능합니다.
그래서 정리하면 타유저의 스키마에 접근하려면 무조건 유저명이 명기되어야 합니다.
그런데 명기 안했는데 접근되는게 있다? 그건 synonyms가 잡혀있다고 보면 됩니다.
명기 안하고 접근하고 싶다? 그건 synonyms를 만들어주면 됩니다.