Object Privileges(객체 권한)
객체 권한은 유저가 소유하고 있는 특정한 객체를
다른 사용자들이 엑세스 하거나 조작 할 수 있게 하기 위해서 생성을 합니다. -
테이블이나 뷰, 시퀀스, 프로시저, 함수, 또는 패키지 중 지정된 한 오브젝트에 특별한 작업을 수행 할 수 있게 합니다. - Object 소유자는 다른 사용자에게 특정 Object Privileges를 부여 할 수 있습니다.
-
PUBLIC으로 권한을 부여하면 회수할 때도 PUBLIC으로 해야 합니다. - Object Privileges는 Object Type에 따라서 다릅니다.
-
기본적으로 소유한 오브젝트에 대한 모든 권한이 자동적으로 획득됩니다 -
WITH GRANT OPTION 옵션은 롤에 권한을 부여할 때는 사용할 수 없습니다
* Object에 따른 Privileges
객체권한 |
테이블 |
뷰 |
Sequence |
Procedure |
ALTER |
○ |
|
○ |
|
DELETE |
○ |
○ |
|
|
EXECUTE |
|
|
|
○ |
INDEX |
○ |
|
|
|
INSERT |
○ |
○ |
|
|
REFERENCES |
○ |
|
|
|
SELECT |
○ |
○ |
○ |
|
UPDATE |
○ |
○ |
|
|
위의 표에서 맨 왼쪽에 있는 ALTER, DELETE, EXECUTE.. 등등은 object_privilege란에 오면 되고, 맨 윗줄에 있는 테이블, 뷰, 시퀀스, 프로시져 등등은 ON 다음에 있는 object에 입력하면 됩니다.
Object 권한 부여 문법


- object_privilege : 부여할 객체 권한의 이름
- object : 객체명
- user, role : 부여할 사용자 이름과 다른 데이터 베이스 역할 이름
- PUBLIC : 오브젝 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있습니다.
- WITH GRANT OPTION : 권한을 부여 받은 사용자도 부여 받은 권한을 다른 사용자 또는 역할로 부여할 수 있게 됩니다.
|
SQL>GRANT SELECT, INSERT ON emp TO scott WITH GRANT OPTION.
권한이 부여되었습니다.
*설명 : scott 사용자에게 emp테이블을 SELECT, INSERT할 수 있는 권한을 부여했습니다. scott 사용자도 다른 사용자에게 그 권한을 부여 할 수 있습니다.
|
Object 권한의 박탈


- 객체 권한의 철회는 그 권한을 부여한 부여자만이 수행할수 있습니다.
- CASCADE CONSTRAINTS : 이 명령어의 사용으로 REFERENCES객체 권한에서 사용된 참조 무결성 제한을 같이 삭제 할 수 있습니다.
- WITH GRANT OPTION으로 객체 권한을 부여한 사용자의 객체 권한을 철회하면, 권한을 부여받은 사용자가 부여한 객체 권한 또한 같이 철회되는 종속철회가 발생합니다.
|
SQL>REVOKE SELECT, INSERT ON emp FROM scott
*설명 : scott 사용자에게부여한 emp테이블에 대한 SELECT, INSERT권한이 회수 됩니다.. 만약 scott사용자가 다른 사용자에게 SELECT, INSERT권한을 부여했으면.. 그 권한들도 같이 철회가 됩니다.
|
WITH GRANT OPTION을 사용하여 객체 권한 취소
|
WITH GRANT OPTION을 사용하여 부여한 객체 권한을 취소하면 취소 작업이 연쇄적으로 수행 됩니다.

|
시나리오
1. SCOTT가 STORM에게 WITH GRANT OPTION을 사용하여 emp테이블의 SELECT 권한을 부여 합니다.
2. STORM이 emp테이블의 SELECT권한을 TEST에게 부여 합니다.
3. SCOTT가 STORM에게 부여한 emp테이블의 SELECT 권한을 취소 합니다.
|
|

|
결과
- SCOTTt가 STORM에게 부여한 emp테이블에 대한 SELECT 권한을 취소하면 STORM이 부여한 TEST유저가 emp테이블을 SELECT할 수 있는 권한도 자동으로 취소가 됩니다.
| |
객체 권한을 위한 일반 사용자용 데이터 사전 뷰
데이터 사전 뷰 |
설명 |
USER_TAB_PRIVS |
객체 권한의 소유자, 객체 권한 부여자, 객체 권한 피부여자를 볼수있음 |
USER_TAB_PRIVS_MADE |
사용자가 부여한 모든 객체 권한의 뷰 |
USER_TAB_PRIVS_RECD |
사용자가 부여받은 모든 객체 권한의 뷰 |
USER_COL_PRIVS |
객체 권한의 소유자, 객체 권한 부여자, 객체 권한 피부여자의 컬럼의 객체 권한 뷰 |
USER_COL_PRIVS_MADE |
사용자가 부여한 객체 컬럼에 대한 모든 객체 권한 뷰 |
USER_COL_PRIVS_RECD |
사용자가 부여받은 객체 컬럼에 대한 모든 객체 권한 뷰 |
|
★ 롤(Role)
|
ROLE 이란 사용자에게 허가할 수 있는 권한들의 집합 이라고 할 수 있습니다.
- ROLE을 이용하면 권한 부여와 회수를 쉽게 할 수 있습니다.
- ROLE은 Create Role권한을 가진 User에 의해서 생성 됩니다.
- 한 사용자가 여러개의 ROLL을 ACCESS할 수 있고, 여러 사용자에게 같은 ROLE을 부여할 수 있습니다.
- 시스템 권한을 부여하고, 취소할 때와 동일한 명령을 사용하여 사용자에게 부여하고, 취소 합니다.
- 사용자는 ROLE에 ROLE을 부여할 수 있습니다.
- 오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE이 제공 됩니다.
|
아래의 그림처럼 DBA가 유저들에게 권한을 부여할 때 일일이 권한 하나하나씩을 지정을 한다면 몹시 불편할 것 입니다. DBA가 USER의 역할에 맞도록 Role을 생성하여서 Role만 유저에게 지정을 한다면 보다 효율적으 로 유저들의 권한을 관리 할 수 있습니다. |
|

|
ROLE의 생성
문법
ROLE의 부여 순서 ① ROLE의 생성 : CREATE ROLE manager ② ROLE에 권한 부여 : GRANT create session, create table TO manager ③ ROLE을 사용자 또는 ROLE에게 부여 : GRANT manager TO scott, test;
|
-- role을 생성 합니다. SQL> CREATE ROLE manager
-- role에 권한을 부여 합니다. SQL>GRANT create session, create table TO manager
-- 권한이 부여된 role을 user나 role에 부여 합니다. SQL>GRANT manager TO scott, test; |
Dictionary 뷰 |
내 용 |
ROLE_SYS_PRIVS |
Role에 부여된 시스템 권한 |
ROLE_TAB_PRIVS |
Role에 부여된 테이블 권한 |
USER_ROLE_PRIVS |
현재 사용자가 ACCESS할 수 있는 ROLE |
USER_TAB_PRIVS_MADE |
현재 사용자의 객체에 부여한 객체 권한 |
USER_TAB_PRIVS_RECD |
현재 사용자의 객체에 부여된 객체 권한 |
USER_COL_PRIVS_MADE |
현재 사용자 객체의 특정 컬럼에 부여한 객체 권한 |
USER_COL_PRIVS_RECD |
현재 사용자 객체의 특정 컬럼에 부여된 객체 권한 |
|