내가 운영중인 채팅사이트 조이팅스토리에 테이블과 관련해서 무언가를 하려니....
시노임이 좀 문제가 되었다...
시노임으로 해결할 수도 있지만...
요게 더 편리한 듯.... ALTER SESSION SET CURRENT_SCHEMA=유저; (제일 아래... 설명)
동의어
다른계정의 테이블을 불러올때 사용
보안, 권한문제,긴이름을 짧게하여 사용 등등
문법
CREATE SYNONYM 시노님명
FOR 유저명.테이블명
유저 생성.
생성된 유저에 테이블 생성
생성된 테이블에 데이터 입력
SYS 계정에서 TEST_SYNONYM 이라는 SYNONYM 생성.
SCOTT 계정에서 시노님명을 select 하면 검색 할수 있다.
하지만 테이블로 존재하는것은 아니다.
test_synonym 에 대한 scott 계정의 권한주기
sys 계정으로 다음과 같은 권한 부여
scott으로 와서 select와 insert 해본다.
다시 sys 계정에서 scott의 select 권한을 취소한다.
그러면 더이상 scott 계정으로 test_synonym을 select 할수 없게된다.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON 테이블명 TO 사용자
GRANT ALL PRIVILEGES ON 테이블명 TO 사용자명
출처: http://www.cyworld.com/jokercokr2/2513686
---------------------------------------------------------------------------------------------------------
뽀나스
** Synonym 생성 문법 **
**[ Syntax ]*************************************************
* CREATE [PUBLIC] SYNONYM synonym_name
* FOR object_name
*************************************************************
- Public : 모든 사용자가 접근 가능한 시노님을 생성 합니다.
Public Synonym의 생성 및 삭제는 DBA만이 할 수 있습니다.
※ scott USER의 emp테이블을 test USER가 사용하는 예제
1. 먼저 scott/tiger USER로 접속해서 test USER에게 emp테이블을 조작할 권한을 부여합니다.
SQL> GRANT ALL ON emp TO test;
권한이 부여되었습니다.
test user에 대하여 scott의 emp테이블을 조작할 수 있는 권한을 부여 합니다.
권한이 있어야 select하거나 update, insert할 수 있습니다.
2. test USER로 접속해 동의어를 생성합니다.
SQL> connect test/test
SQL> CREATE SYNONYM scott_emp FOR scott.emp;
시노님이 생성되었습니다.
scott USER가 소유하고 있는 emp테이블에 대해 scott_emp라는 일반시노님을 생성 했습니다.
scott 사용자의 emp테이블을 test사용자가 scott_emp라는 동의어로 사용 합니다.
-- 시노님을 이용한 쿼리
SQL> SELECT empno, ename FROM scott_emp;
-- 일반 테이블을 쿼리
SQL> SELECT empno, ename FROM scott.emp;
이 두쿼리의 결과는 같습니다.
EMPNO ENAME
-------- ---------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
15 개의 행이 선택되었습니다.
** 동의어 삭제 **
SQL> DROP SYNONYM scott_emp;
시노님이 삭제 되었습니다.
SQL> SELECT empno, ename FROM scott_emp;
라인 1에 오류:
ORA - 00942 : 테이블 또는 뷰가 존재하지 않습니다.
[출처] 9. 오라클 객체(4) [SYNONYM]|작성자 요요
------------------------------------------------------------------------------------------------------------
뽀나스
oracle 다른 계정에서 synonym이나 username 지정 없이 table query 하기.
대부분의 오라클 운영자는 '/as sysdba' 나 system 계정으로 작업을 합니다.
모니터링 중 특정 user에서 대해 수행되는 sql의 이상 등을 발견하는 경우 가끔 해당 sql을 직접 수행해 보는 경우가 있는데, v$sqltext 등에서 잡아온 sql을 그대로 수행하면 에러가 당연히 발생합니다.
해당 sql의 table list가 몇개 안될 경우 table 명 앞에 username을 지정하면, 수행은 가능하지만 귀찮기도 하고 어찌되었던 sql이 변경되 버리고 말죠.
또 다른 sql에서 권한이 있는 table을 수행할 경우에도 table의 각각의 username을 설정해야 합니다.
그게 아니라면 synonym을 따로 만들어 줘야 합니다.
이러한 경우 간단히 CURRENT_SCHEMA의 설정으로 이 모든 귀찮은 것을 해결할 수 있습니다.
CURRENT_SCHEMA는 현재 수행되는 SCHEMA환경을 지정한 SCHEMA로 변경해 줍니다.
위의 경우 당연히 에러가 발생하게 됩니다.
그러면 synonym이나 username을 추가 지정없이 수행하려면 다음의 CURRENT_SCHEMA를 SCOTT으로 지정해 줍니다.
출처: http://energ.tistory.com/141
방장은 누규? 채팅사이트 조이팅스토리를 운영하며 마케팅, 사업 등에 관심이 많은 철이
---------------------------------------------------------------------------------------------------------------
뽀나스
mom이라는 사용자의
A, B, C 라는 테이블을 사용하기 위해
다른 사용자들은 mom.A, mom.B 등으로 사용하는데
A, B 로 바로 쓸수 있게 하는
synonym을 일괄 생성하는 방법
================
sqlplus 로 접속해서
spool make_synonyms.sql
SELECT 'create public synonym ' || table_name || ' for ' || table_name || ';'
FROM user_tables;
spool off
@make_synonyms
================
다른 방법은 current schema를 쓰는 방법
alter session set current_schema=scott;
==================
USER_B에게 USER_A.sample의 select 권한 부여
GRANT SELECT ON USER_A.sample_table TO USER_B;
http://www.dude.co.kr
시노임이 좀 문제가 되었다...
시노임으로 해결할 수도 있지만...
요게 더 편리한 듯.... ALTER SESSION SET CURRENT_SCHEMA=유저; (제일 아래... 설명)
동의어
다른계정의 테이블을 불러올때 사용
보안, 권한문제,긴이름을 짧게하여 사용 등등
문법
CREATE SYNONYM 시노님명
FOR 유저명.테이블명
생성된 유저에 테이블 생성
생성된 테이블에 데이터 입력
SYS 계정에서 TEST_SYNONYM 이라는 SYNONYM 생성.
SCOTT 계정에서 시노님명을 select 하면 검색 할수 있다.
하지만 테이블로 존재하는것은 아니다.
test_synonym 에 대한 scott 계정의 권한주기
sys 계정으로 다음과 같은 권한 부여
scott으로 와서 select와 insert 해본다.
다시 sys 계정에서 scott의 select 권한을 취소한다.
그러면 더이상 scott 계정으로 test_synonym을 select 할수 없게된다.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON 테이블명 TO 사용자
GRANT ALL PRIVILEGES ON 테이블명 TO 사용자명
출처: http://www.cyworld.com/jokercokr2/2513686
---------------------------------------------------------------------------------------------------------
뽀나스
** Synonym 생성 문법 **
**[ Syntax ]*************************************************
* CREATE [PUBLIC] SYNONYM synonym_name
* FOR object_name
*************************************************************
- Public : 모든 사용자가 접근 가능한 시노님을 생성 합니다.
Public Synonym의 생성 및 삭제는 DBA만이 할 수 있습니다.
※ scott USER의 emp테이블을 test USER가 사용하는 예제
1. 먼저 scott/tiger USER로 접속해서 test USER에게 emp테이블을 조작할 권한을 부여합니다.
SQL> GRANT ALL ON emp TO test;
권한이 부여되었습니다.
test user에 대하여 scott의 emp테이블을 조작할 수 있는 권한을 부여 합니다.
권한이 있어야 select하거나 update, insert할 수 있습니다.
2. test USER로 접속해 동의어를 생성합니다.
SQL> connect test/test
SQL> CREATE SYNONYM scott_emp FOR scott.emp;
시노님이 생성되었습니다.
scott USER가 소유하고 있는 emp테이블에 대해 scott_emp라는 일반시노님을 생성 했습니다.
scott 사용자의 emp테이블을 test사용자가 scott_emp라는 동의어로 사용 합니다.
-- 시노님을 이용한 쿼리
SQL> SELECT empno, ename FROM scott_emp;
-- 일반 테이블을 쿼리
SQL> SELECT empno, ename FROM scott.emp;
이 두쿼리의 결과는 같습니다.
EMPNO ENAME
-------- ---------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
15 개의 행이 선택되었습니다.
** 동의어 삭제 **
SQL> DROP SYNONYM scott_emp;
시노님이 삭제 되었습니다.
SQL> SELECT empno, ename FROM scott_emp;
라인 1에 오류:
ORA - 00942 : 테이블 또는 뷰가 존재하지 않습니다.
[출처] 9. 오라클 객체(4) [SYNONYM]|작성자 요요
------------------------------------------------------------------------------------------------------------
뽀나스
oracle 다른 계정에서 synonym이나 username 지정 없이 table query 하기.
대부분의 오라클 운영자는 '/as sysdba' 나 system 계정으로 작업을 합니다.
모니터링 중 특정 user에서 대해 수행되는 sql의 이상 등을 발견하는 경우 가끔 해당 sql을 직접 수행해 보는 경우가 있는데, v$sqltext 등에서 잡아온 sql을 그대로 수행하면 에러가 당연히 발생합니다.
해당 sql의 table list가 몇개 안될 경우 table 명 앞에 username을 지정하면, 수행은 가능하지만 귀찮기도 하고 어찌되었던 sql이 변경되 버리고 말죠.
또 다른 sql에서 권한이 있는 table을 수행할 경우에도 table의 각각의 username을 설정해야 합니다.
그게 아니라면 synonym을 따로 만들어 줘야 합니다.
이러한 경우 간단히 CURRENT_SCHEMA의 설정으로 이 모든 귀찮은 것을 해결할 수 있습니다.
CURRENT_SCHEMA는 현재 수행되는 SCHEMA환경을 지정한 SCHEMA로 변경해 줍니다.
SQL> CONNECT SCOTT/TIGER;
SQL> GRANT SELECT ON EMP TO JAMES;
SQL> CONNECT JAMES/TIGER;
SQL> SELECT COUNT(*) FROM SCOTT.EMP;
SQL> SELECT COUNT(*) FROM EMP;
SELECT COUNT(*) FROM EMP
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> GRANT SELECT ON EMP TO JAMES;
SQL> CONNECT JAMES/TIGER;
SQL> SELECT COUNT(*) FROM SCOTT.EMP;
SQL> SELECT COUNT(*) FROM EMP;
SELECT COUNT(*) FROM EMP
*
ERROR at line 1:
ORA-00942: table or view does not exist
위의 경우 당연히 에러가 발생하게 됩니다.
그러면 synonym이나 username을 추가 지정없이 수행하려면 다음의 CURRENT_SCHEMA를 SCOTT으로 지정해 줍니다.
SQL> CONNECT JAMES;
SQL> ALTER SESSION SET CURRENT_SCHEMA=SCOTT;
Session altered.
SQL> SELECT COUNT(*) FROM EMP;
COUNT(*)
10
...
SQL> ALTER SESSION SET CURRENT_SCHEMA=SCOTT;
Session altered.
SQL> SELECT COUNT(*) FROM EMP;
COUNT(*)
10
...
출처: http://energ.tistory.com/141
방장은 누규? 채팅사이트 조이팅스토리를 운영하며 마케팅, 사업 등에 관심이 많은 철이
---------------------------------------------------------------------------------------------------------------
뽀나스
mom이라는 사용자의
A, B, C 라는 테이블을 사용하기 위해
다른 사용자들은 mom.A, mom.B 등으로 사용하는데
A, B 로 바로 쓸수 있게 하는
synonym을 일괄 생성하는 방법
================
sqlplus 로 접속해서
spool make_synonyms.sql
SELECT 'create public synonym ' || table_name || ' for ' || table_name || ';'
FROM user_tables;
spool off
@make_synonyms
================
다른 방법은 current schema를 쓰는 방법
alter session set current_schema=scott;
==================
USER_B에게 USER_A.sample의 select 권한 부여
GRANT SELECT ON USER_A.sample_table TO USER_B;
http://www.dude.co.kr
댓글 없음:
댓글 쓰기