본문 바로가기
Oracle/Role

데이터 베이스_ 오라클 [Role] 삭제 및 권한위임

by Super Santj 2019. 7. 4.

문제_

만약 관리자가 usercreate 롤을 생성하고, scott,test에게 권한을 부여한뒤 다시 usercreate 롤을 삭제 한다면, 이미 그 롤을 부여받은 scott, test는 해당 권한을 사용할수있을까?

직접 해보면 알것이다. 롤을 만들고 지울수있는 계정은 시스템 계정이다. 먼저 시스템 계정에 로그인을 한뒤 create의 반대인 drop 구문을 작성하여 선언하면 된다.

형식_

drop role 삭제시킬 롤명

SQL> conn sys/sys12345 as sysdba
연결되었습니다.
SQL> drop role usercreate;

롤이 삭제되었습니다.

롤은 삭제가 되었고, 우리가 확인하고싶은 계정으로 로그인하여 부여받은 권한이 무효가 되었는지 다시 확인해보자.

SQL> conn scott/tiger
연결되었습니다.
SQL> create user imsi identified by t1234;
create user imsi identified by t1234
                               *
1행에 오류:
ORA-01031: 권한이 불충분합니다

보는바와 같이 권한이 불충분하여 계정 생성이 불가하다는것을 확인할수가있다.

즉 시스템 계정에서 롤을 삭제하게 된다면 삭제된 롤에 부여된 권한 모두 다같이 삭제가 된다는것을 확인할수가있다. 이또한 롤의 장점이다. 생성과 삭제가 편리하다는 점이다.

추가 예제_

만약 관리자가 잠시 자리를 비울경우 휴가를 떠났다거나 부재중일 경우는?

해결방안_

믿을만한 사람의 계정에게 with admin option 을 부여해주면 된다. 이렇게 부여가 된다면, 관리자의 권한을 임시적으로 지정된 타 계정에게 권한을 부여해줄수 있는 것이다.

위 내용을 전문 용어로 "with admin option" = "위임" 한다 라고 칭한다.

시나리오_

1. aaa,bbb,ccc 계정을 생성한다 (암호는 계정명과 동일하게)

2. 각자 로그인해서 자원(테이블)을 생성할 수 있는 권한을 부여, connect,resource 등 총 9개, 그 과정속에 ccc에게 connect 권한을 주지 못하였는데 관리자가 부재중일경우 시스템계정에게 권한을 부여받은 BBB 계정이 CCC 에게 connect 권한을 부여해보자는 이야기 이다.

시나리오 풀이_

    1) 계정 생성

SQL> create user aaa identified by aaa;

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

SQL> create user bbb identified by bbb;

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

SQL> create user ccc identified by ccc;

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

 

    2) 각 계정별 권한 부여 BBB 계정에는 with admin option 권한까지 같이 부여, CCC 에는 권한 미부여, AAA에는 connect, resource 권한만 부여.

SQL> grant connect, resource to aaa;

권한이 부여되었습니다.

SQL> grant connect, resource to bbb with admin option;

권한이 부여되었습니다.

 

    3) 이상태로 관리자는 자리를 떠났고, 휴가를 간 상태라고 가정하여 시스템 관리자의 권한을 위임받은 BBB 계정이 CCC에게 마저 권한을 부여해보는 과정, 권한 부여가 되었고 정상적으로 로그인이 되었고, 테이블 생성, 데이터 입력까지 모두 가능한것을 확인할수가 있다.

SQL> conn bbb/bbb
연결되었습니다.
SQL> grant connect,resource to ccc;

권한이 부여되었습니다.

SQL> conn ccc/ccc
연결되었습니다.

SQL> create table abc(id number);

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

SQL> insert into abc values(1);

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

SQL> select * from abc;

        ID
----------
 1

 

만약 여기서, 관리자가 다시 돌아온후에 BBB에게 위임했던 모든 권한을 다시 회수를 하게된경우, BBB가 CCC 에게 부여했던 권한은 어떻게 될까를 직접 실행을 통해 알아보자.

우선 관리자 계정으로 로그인을 한후 BBB 에게 connect 와 resource 두가지 권한을 회수한후

SQL> conn sys/sys12345 as sysdba
연결되었습니다.
SQL> revoke connect,resource from bbb;

권한이 취소되었습니다.

ccc 계정으로 로그인을 해본다. 로그인 해본후 에러가 난다면 같이 회수가 된것이고, 에러가 나지않는다면 회수가 되지 않은것이다.

SQL> conn ccc/ccc
연결되었습니다.

확인 결과 CCC는 시스템에 로그인 할수있음을 확인할수 있다. BBB에게 모든 권한을 부여하였지만, 권한을 갖고 있던 BBB가 CCC 에게 부여한 그 권한은 BBB의 권한과는 별개로 CCC 에게 부여가 된것이고, 이 경우 만약 BBB와 CCC 두명의 권한을 모두 회수를 하고자 한다면, 시스템 관리자는 BBB와 CCC 두명 모두에게 권한을 각각 회수 해야한다.

즉 생성된 계정은 자기가 부여받은 권한 범위내에서 권한을 다른 계정에게 위임이 가능하다. 권한을 회수당해도 위임 받은 계정에게는 영향이 없다.

댓글