database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 14868 게시물 읽기
No. 14868
다른 유져의 table을 reerence할때 앞에 user. 을 붙이지 않는법?
작성자
김상은
작성일
2003-07-08 11:56
조회수
1,804

User A가 User B의 table을 reference할 때,

 

select * from B.table_name 식으로 하지 않고,

 

select * from table_name으로 하는 법을 알고싶습니다.

 

B의 모든 테이블을 전부 이렇게 사용하고 싶습니다.

 

다시말해서 synonym에 대한 질문이 아니고,

 

2개의 user가 1개의 user table들을 공유하는 법에 대한 질문입니다.

 

(혹시 synonym 으로 특정 user의 모든 테이블을 한번에

전부 원본의 이름과 같은 이름으로 synonym을 걸 수 있고,

그 이후에 생성되는 table에 대해서도 자동으로 모두 synonym이

적용되는 방법이 있다면 그것도 원하는 답이 될지도 모르겠습니다.)

이 글에 대한 댓글이 총 1건 있습니다.

우선 새로운 개체에 대해서는

자동으로 체크해서 하는 프로시저를 만들어 주시지 않는다면

새로 SYNONYM을 만들어 주셔야 합니다.

 

그러나 현재 존재 하는 개체에 대해 PUBLIC SYNONYM을 생성시키고 개체에 대한 SELECT 권한을 주신다면 간단하지요..

 

미력하나마 아래 프로시저를 이용하면

현재 있는 개체에 대해 자동으로 SYNONYM과 SELECT 에 대한 권한을 주실수 있습니다.

 

<< 프로시저 파라메터 >>

FUSER : 실제 개체가 존재하는 유저 즉. B 유저

TUSER : A 유저

 

프로시저 실행전 에

SYSTEM 계정으로 로그인 하셔서

GRANT CREATE PUBLIC SYNONYM TO <B 유저>;

이렇게 권한을 주시기 바랍니다.

그리고 B유저로 로그인 하시고 Compile 후

실행시키세요.

 

create or replace procedure mk_synonym(fuser varchar2,tuser varchar2)

as

str varchar2(100);

cnt number;

cursor c1 is

select 'create public synonym '||table_name ||' for ' ||fuser||'.'||table_name mk_stats from user_tables;

cursor c2 is

select 'grant select on '||table_name||' to ' ||tuser mk_stats from user_tables;

begin

 

cnt := 0;

 

for rec in c1 loop

 

str := rec.mk_stats;

dbms_output.put_line(' prepared : '||rec.mk_stats);

EXECUTE IMMEDIATE str;

dbms_output.put_line(' Sucess : '||rec.mk_stats);

 

cnt := cnt +1;

 

end loop;

 

dbms_output.put_line(cnt || 'Synonym created');

 

cnt := 0;

 

for rec in c2 loop

 

str := rec.mk_stats;

dbms_output.put_line(' prepared : '||rec.mk_stats);

EXECUTE IMMEDIATE str;

dbms_output.put_line(' Sucess : '||rec.mk_stats);

 

cnt := cnt +1;

 

end loop;

 

dbms_output.put_line(cnt || 'privs granted');

 

end;

/

 

복잡하시다면..그냥

위에 있는 쿼리 두개의 결과를 spool 받으신후

스크립으로 수행하셔도 됩니다.

 

중요한것은 public synonym을 이용한다는 것이지요..ㅎㅎ

nagne님이 2003-07-08 15:26에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
14873네트&#50916;드라이브에 테이블스페이스를 맹글려는데..... [1]
미영이
2003-07-09
1229
14872listener start 시 오류에 대한 답변부탁드립니다. [2]
질문이
2003-07-09
3727
14871함수인지 패키지인지 에러나요. [2]
홍상범
2003-07-08
2163
14868다른 유져의 table을 reerence할때 앞에 user. 을 붙이지 않는법? [1]
김상은
2003-07-08
1804
14867[질문]오라클8i에 데이터 insert시 이상한현상 [1]
김지호
2003-07-08
1100
14866MSSQL의 임시테이블(#temp)같은게 오라클에는 없나요?... 답답하네요..ㅠㅠ [1]
드기
2003-07-08
3381
14864[질문] long타입으로 지정한 필드의 길이는... [1]
손동언
2003-07-07
1704
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다