Technical posts/Oracle

오라클 다른유저로 특정유저 접속하기

ODB 2015. 1. 1. 23:34

1월1일에 포스팅을.....


가끔 프로젝트를 들어가다 보면 Password를 오픈하지 않는 사이트들이 있다..

흠.. 하드코딩된 쉘 같은거 몇개만 열거나 cat * |grep  하면 되는걸 꼭 숨긴다..

보안서약을 했기때문에 아는척을 하기도 그렇고 뭐 어쩌겠나...


상황은 

A라는 유저가 Application을 돌리기 위한 계정이었고

B라는 유저를 신규생성해서 DBA권한을 줬지만

A유저의 테이블을 조회하기 위해서는 테이블마다 A.이라는 스키마 정의가 필요하다

끄으... 소스의 모든 쿼리를 수정할수도 없고.. 시노님을 만들자니 어마어마한 테이블량;;

A라는 유저의 패스워드를 절대 받을수는 없다


그리하여 찾은것이 'grant connect through'


한번보자


SQL> create user app_user identified by app_user; 


사용자가 생성되었습니다. 


SQL> create user dba_user identified by dba_user; 


사용자가 생성되었습니다. 


SQL> grant connect , resource to app_user; 


권한이 부여되었습니다. 


SQL> grant connect , resource to dba_user; 


권한이 부여되었습니다. 


SQL> alter user app_user grant connect through dba_user; 


사용자가 변경되었습니다.


app_user 와 dba_user를 생성하고

alter user app_user grant connect trough dba_user;로

dba_user가 app_user인것처럼 로그인이 가능하도록 설정이 된다

이런 경우에는 패스워드가 없어도 dba_user가 app_user로 접속처리가 가능하다


SQL> conn app_user/app_user

연결되었습니다.


SQL> create table test_user (username varchar(50), usernum int);


테이블이 생성되었습니다.


SQL> insert into test_user values ('sean','1');


1 개의 행이 만들어졌습니다.


SQL> select * from test_user;


USERNAME                          USERNUM

------------------------------ ----------

sean                                    1



SQL> show user

USER은 "APP_USER"입니다


SQL> commit;


커밋이 완료되었습니다.


app_user에 테이블을 만들고 상큼한 데이터도 넣어줍니다



$sqlplus dba_user[app_user]/dba_user


SQL*Plus: Release 11.2.0.3.0 Production on 목 1월 1 23:22:13 2015


Copyright (c) 1982, 2011, Oracle.  All rights reserved.



다음에 접속됨:

Oracle Database 11g  11.2.0.3.0 - 64bit Production


SQL> select * from test_user;


USERNAME                          USERNUM

------------------------------ ----------

sean                                    1


SQL> show user

USER은 "APP_USER"입니다


상큼하게 조회가 가능하고

dba_user[app_user]로 로그인을 했기 떄문에 show user시에 app_user로 나온다


good?




"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."