Atomic Habits

시노님(SYNONYM) & 테이블 권한 부여 본문

IT/DB

시노님(SYNONYM) & 테이블 권한 부여

체계성 2021. 12. 11. 08:48

 

G O T

C F

R O F

 

 

1. 권한 부여와 권한 회수

작업 순서 : SVC2 접속 -> RAW 에게 INSERT 권한 부여 -> RAW 접속 & INSERT -> 권한 회수(REBOKE)

SVC2 접속) GRANT ALL ON SVC2.TAB TO RAW
RAW  접속) INSERT INTO  SVC2.TAB  SELECT * FROM RAW.TAB;
SVC2 접속) REVOKE SELECT, INSERT, DELETE, UPADATE  ON SVC2.TAB   FROM RAW;
                   REVOKE                             ALL                               ON SVC2.TAB   FROM PUBLIC(전체 대상);

 

**************************************************************************************************
DROP SYNONYM [STG 시노님 소유하는 계정].RENT_APT;
CREATE SYNONYM [STG 시노님 소유하는 계정].RENT_APT  FOR [SVC2테이블 소유 계정].RENT_APT ;

            -------------- 시노님을 사용하지 않는다면, 아래 권한만 부여해도 되지 않을까? -------------- 

GRANT ALL ON [SVC2.RENT_APT 테이블 소유 계정] TO [SVC - 실제 쿼리 날릴 계정];

(SVC - 실제 쿼리 날릴 계정)에서 쿼리 수행 >>> DELETE FROM [SVC2.RENT_APT 테이블 소유 계정] ;


**************************************************************************************************


2. 시노님(Synonym) 을 생성하는 권한을 부여하는 방법입니다.
1) 시노님 생성 권한을 부여합니다.
시노님을 생성하기 위해서는 [ 시노님 생성권한 ] 과

시노님을 생성하려는 [ 유저의 테이블에 대한 접근 권한 ]이 필요합니다


시노님 생성권한 부여 쿼리는 다음과 같습니다.
SQL> GRANT CREATE SYNONYM to '시노님 생성권한을 받을 유저명'
예시> GRANT CREATE SYNONYM to 'B1'

2) 테이블 접근권한을 부여합니다. 명령어는 아래와 같습니다.
여기서 나는 SELECT 권한만 주고 싶다면 ALL 대신 SELECT를 입력하시면 됩니다.
SQL> GRANT '권한명' ON  '유저명.테이블명' TO '권한받을 유저';

       = GRANT '권한명' ON  '소유자.테이블명' TO '권한받을 유저(테이블 비 소유자)';
예시> GRANT ALL ON  A1.table01 TO B1;

 


3) 권한을 부여한 테이블에 접근이 가능한지 테스트를 진행해 봅니다.
권한부여를 완료했으니 사용자 B1으로 접속하여 A1.table01로 접근이 가능한지 테스트를 진행합니다.
쿼리가 정상적으로 수행된다면 시노님 생성을 위한 준비가 완료되었습니다. 
SQL> SELECT * FROM A1.table01;

3. 시노님(Synonym) 을 생성하는 방법 입니다.
아래의 명령어를 실행해 시노님을 생성합니다.PUBLIC은 모든 사용자가 접근이 가능하도록 설정해주는 것입니다. 
PUBLIC을 선언해주지 않으면 기본값으로 PRIVATE가 선언됩니다. (로그인한 유저 기준으로 생성됩니다.)
SQL> CREATE [ PUBLIC ] SYNONYM '시노님 소유할 계정 . 시노님 이름' FOR '테이블 소유 계정 . 객체 이름'

1) 사용자 B1로 로그인하여 시노님 생성을 진행합니다.
SQL> CREATE SYNONYM      A1_table01 FOR A1.table01;

       = CREATE SYNONYM B1.A1_table01 FOR A1.table01;

2) 이제 B1 사용자는 A1.table01을 조회할 때 A1_table01 을 사용하여 출력이 가능하게 되었습니다 (A1_table01 = A1.table01)
SQL> SELECT * FROM A1_table01;

4. 시노님(Synonym) 삭제하는 방법입니다.
생성했던 시노님 명을 아래와 같이 입력하시면 삭제가 됩니다.
SQL> DROP SYNONYM   A1_table01;

5. 시노님(synonym) 조회하는 방법입니다.
SELECT * FROM USER_SYNONYMS; 
SELECT * FROM ALL_SYNONYMS;

출처 : https://bebeya1.tistory.com/12

 

 

 

 -----------------------------------------------------------------------------------------------
1.  시노님(Synonym) 생성

CREATE [ PUBLIC ] SYNONYM [ 시노님 이름 ]
FOR [ 객체 이름 ]

* PUBLIC은 모든 사용자가 접근이 가능하도록 설정해주는 것입니다.
* PUBLIC을 선언해주지 않으면 기본값으로 PRIVATE가 선언됩니다.

EX) 예를 들어보겠습니다.

일단은 유저가 두명이 있다고 가정하겠습니다.( user1 / user2 )
1) user1 이 가지고있는 테이블에 대해 user2가 접근이 가능하도록 권한을 주어야 합니다.

GRANT  ALL   ON oracleStury TO user2; -- user2에게 테이블 조작 권한 부여
GRANT SELECT ON oracleStury TO user2; -- user2에게 테이블 SELECT 권한 부여

(조작 권한을 주고 싶으면 ALL을 아니면 SELECT 권한만 부여하고 싶으면 SELECT만 사용하시면 됩니다. 둘중하나)

2) 이제 user2가 user1의 oracleStudy 테이블에 접근해보도록 하겠습니다.

SELECT * FROM user1.oracleStudy;

앞에 해당 유저의 이름을 붙여주고 .(점) 테이블 이름을 적어줘야 조회가 가능합니다.(물론 조회권한 필요)
이제 synonym을 사용하여 테이블 이름을 바꿔줍시다.

CREATE SYNONYM u1_oralStudy FOR user1.oracleStudy;

이제 시노님으로 만든 이름을 사용할 수 있게 되었습니다.

SELECT * FROM u1_oralStudy;

위의 user1.oracleStudy 와 u1_oralStudy 의 값이 동일하게 나올것입니다.

출처: https://mine-it-record.tistory.com/68 [나만의 기록들]


 


 -----------------------------------------------------------------------------------------------
[ 작업 내용 - 시노님 및 권한 일괄 부여 ]

B계정에는 실제 테이블 생성 및 전체 데이터 주입하고, 
A계정에서 권한만 줘서 조회가 가능하게끔 설정

[A계정] 에서 B의 스키마명 없이 조회 가능
EX ) SELECT * FROM B.테이블;  ->  SELECT * FROM 테이블;

[대상]
B의 전체 테이블

1. B계정의 테이블 권한 주기

[B계정] 나같은 경우에는 모든 테이블 대상이 었으므로 ..
 1) B의 전체 테이블 조회 권한을 A에게 주고 싶은 경우

 SELECT 'GRANT SELECT ON B.' || TABLE_NAME || ' TO A;'
 FROM ALL_TABLES
 WHERE OWNER = 'B';

쿼리 결과를 복사하여 실행한다.

2. SYNONYM 생성
[A 계정]
 1)  synonym 전체 테이블 전체에 적용
테이블이나 함수명 을 다른 계정에서 접근하기 위해서 계정명.테이블명, 계정명.함수명 으로 접근 하여야 한다. 
스키마명 없이 테이블명, 함수명으로 접근하기 위해 SYNONYM을 설정 한다.

(  A 계정에서 실행 )
 SELECT 'CREATE SYNONYM ' || TABLE_NAME || ' FOR B.'|| TABLE_NAME || ';'
 FROM ALL_TABLES
 WHERE OWNER = 'B';

(  관리자 계정에서 실행 )
 SELECT 'CREATE SYNONYM   A.' || TABLE_NAME || '  FOR B.'|| TABLE_NAME || ';'
 FROM ALL_TABLES
 WHERE OWNER = 'B';

 * 이제 (A계정에서 테이블 하나 없더라도 )   SELECT * FROM 테이블명  으로 (B 계정 소유의 테이블에 ) 접근 가능. 
 
 
 -----------------------------------------------------------------------------------------------
 A1)
GRANT CREATE SYNONYM TO 'B1';       : (B1에게) 시노님 생성 권한 부여
GRANT SELECT ON A1.TABLE_1 TO B1;   : (B1에게) 테이블 접근 권한 부여 

TEST) B1
SELECT * FROM A1.TABLE_1;

B1)
CREATE SYNONYM   TABLE_OF_A1   FOR   A1.TABLE_01;
-> SELECT * FROM TABLE_OF_A1;


Comments