데이터베이스 보안 - 객체 권한

객체 권한


객체 권한은 아래 테이블을 참조하자. 일단 각 사용자는 자신이 만든 테이블, 뷰, 시퀸스, 프로시저와 같은 객체들에 대해서 위의 권한들을 다 가지고 있다. 이를 객체 권한이라고 말한다. 이 중 다른 사용자에게 부여할 수 있는 권한은 각 객체의 종류에 따라 다르다.


객체 권한을 부여하는 방법은 시스템 권한과 조금 다르다. 이제는 부여할 권한이 어떤 객체에 관련된 것인가를 같이 알려줘야 하기 때문이다.

객체 권한 부여 방법

grant 부여할 권한 ( )
on 대상이 되는 객체
to 사용자;

그리고 이 때 한 테이블에 대해서 여러 개를 동시에 줄 수 있지만, 여러 테이블에 대해서는 동시에 줄 수는 없기 때문에 필요한 경우에는 grant 문을 여러번 작성하자. 이제 객체 권한을 부여해보자.

먼저 이를 위해서 cmd 창을 두개를 키고, 하나는 scott, 또 다른 하나는 tom으로 접속하자.

그리고 먼저 tom에서 scott의 emp 테이블에 접근해보도록 하겠다.
이 때, scott 계정의 테이블이라는 것을 알려주기 위하여 scott.emp라고 테이블 명을 작성해야한다. 물론 이 때 권한이 없기 때문에 오류가 발생한다.


이제 scott 계정에 접속하여 dept2 테이블에 대한 select 권한을 tom에게 주도록 하겠다. 이를 위해서 dept 에서 복사하여 dept2를 만들고 권한을 부여하자.


이제 tom은 권한을 받았기 때문에 scott의 dept2를 검색할 수 있게 되었다.

하지만 select권한만을 부여받았기 때문에 당연히 데이터를 입력하는 것은 불가능하다.

이제 insert 권한을 부여하고 tom에서 다시 데이터를 넣어보자.

물론 이 때 트랜잭션이 발생하기 때문에 scott에서 읽었을 때 반영이 되지 않는다. 따라서 tom에서 이를 commit해주자.


이번에는 update 권한을 부여해보자. 다음처럼 dept2의 dname과 loc에 대해서 update 권한을 tom에게 부여하였다.

그리고 tom에서 update문을 실행하고 테이블을 확인해보겠다.

이 때, deptno를 update해보도록 하겠다. 우리가 위에서 tom에게 update 권한을 부여할 때, deptno에 대한 권한은 주지 않았기 때문에 다음과 같은 오류가 출력된다.

즉 이를 통해서 각 사용자에 대해서 접근할 수 있는 데이터를 제한함으로써 보안을 유지할 수 있게 된다(함부로 데이터를 변경할 수 없도록).


권한 취소

이번에는 권한을 취소해보도록 하겠다. 취소는 grant만 revoke로 바꾸어주면 된다.

revoke 부여할 권한 ( )
on 대상이 되는 객체
to 사용자;

실제로 방금 부여했던 update 권한을 취소해보자.

이제 tom에서 update를 할 때 오류가 발생한다.


딕셔너리 뷰

권한과 관련된 데이터 딕셔너리는 종류가 많다. 이를 통해 사용자에게 부여된 권한을 확인 할 수 있다.

먼저 scott이 부여한 권한을 살펴보고, tom이 부여받은 권한과 비교해보겠다. 이를 위해서 부여받은 사용자, 테이블 이름, 권한 부여자, 권한 내용을 user_tab_privs_made 뷰에서 확인해보자.

다음은 tom에서 부여받은 권한을 살펴보겠다. 이를 위해서 부여자, 테이블 이름, 부여 대상자, 권한 내용을 user_tab_privs_recd 뷰에서 확인해보자.

dept2 테이블에 대해서 insert 권한을 scott이 tom에게 주었다는 것을 확인할 수 있다.

이 내용을 developer를 활용하여 확인할 수 있다. 권한이 부여된 테이블에 접속하여 권한 부여 탭을 통해 내용을 확인해보자.

댓글

이 블로그의 인기 게시물

데이터베이스 PL/SQL - 배열과 테이블

데이터베이스 PL/SQL 변수선언

데이터베이스 PL/SQL 제어문 - 반복문