본문 바로가기

카테고리 없음

ORACLE 9i PRIVILEGES v1.0

ORACLE 9i PRIVILEGES

 

from

 

1.  권한의 전파

A.  환경

             i.     U1, U2USER를 생성하였고 DEFAULT TABLESPACE ,TEMPORARY TABLESPACE

지정한상태이다.

B.  WITHADMIN OPTION

SQL> show user

USER is "SYS"

SQL> grant create session to u1 withadmin option;

 

Grant succeeded.

 

SQL> conn u1/u1;

Connected.

SQL> grant create session to u2 withadmin option;

 

Grant succeeded.

(SYSTEM 권한에는 WITH ADMIN OPTION을사용한다.)

SQL> conn u2/u2;

Connected.

SQL> conn /as sysdba

Connected.

SQL> revoke create session from u1;

 

Revoke succeeded.

 

SQL> conn u2/u2;

Connected.

SQL> conn /as sysdba

Connected.

(U1으로부터 CREATE SESSION 권한을 빼앗아도 U2에 부여된 권한은 남아있다.)

 

C.  WITH GRANT OPTION

SQL> grant select on scott.emp to u1 withadmin option;

grant select on scott.emp to u1 with adminoption

                                     *

ERROR at line 1:

ORA-00993: missing GRANT keyword

(객체권한에 with admin option 을 사용하면 에러가 난다.)

 

SQL> grant select on scott.emp to u1 withgrant option;

 

Grant succeeded.

 

SQL> conn u1/u1

Connected.

SQL> grant select on scott.emp to u2 withgrant option;

 

Grant succeeded.

 

SQL> show user

USER is "U1"

SQL> select count(*) from scott.emp;

 

 COUNT(*)

----------

       14

 

SQL> conn u2/u2

Connected.

SQL> select count(*) from scott.emp;

 

 COUNT(*)

----------

       14

(U1, U2 모두 부여한 객체에 접근가능함을 확인했다.)

SQL> conn /as sysdba;

Connected.

SQL> revoke select on scott.emp from u1;

 

Revoke succeeded.

 

SQL> conn u1/u1

Connected.

SQL> select count(*) from scott.emp;

select count(*) from scott.emp

                           *

ERROR at line 1:

ORA-00942: table or view does not exist

 

 

SQL> conn u2/u2

Connected.

SQL> select count(*) from scott.emp;

select count(*) from scott.emp

                           *

ERROR at line 1:

ORA-00942: table or view does not exist

 (U1의 객체권한을 제거하였는데 U2 U1으로부터부여받은 객체권한도 연쇄적으로 제거되었다.)

 

 

2.  ROLE 이 가지고있는 권한의 확인

A.  HR USER SAMPLE 로 진행하겠다.

B.  특정 USER 가 가지고 있는 ROLE 의 확인

SQL> desc dba_role_privs;

 Name                                     Null?    Type

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

 GRANTEE                                           VARCHAR2(30)

 GRANTED_ROLE                              NOT NULLVARCHAR2(30)

 ADMIN_OPTION                                       VARCHAR2(3)

 DEFAULT_ROLE                                      VARCHAR2(3)

 

SQL> select grantee,granted_role

 2  from dba_role_privs

 3  where grantee = 'HR';

 

GRANTEE                        GRANTED_ROLE

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

HR                             CONNECT

HR                             RESOURCE

 

(확인결과 HR 유저는 CONNECT RESOURCE ROLE 로 가지고 있다.)

C.  해당 ROLE 에 귀속되어있는 PRIVILEGE 의 확인

SQL> select role,privilege

 2  from role_sys_privs

 3  where role in ('CONNECT','RESOURCE');

 

ROLE                           PRIVILEGE

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

CONNECT                        CREATE VIEW

CONNECT                        CREATE TABLE

CONNECT                       ALTER SESSION

CONNECT                        CREATE CLUSTER

CONNECT                        CREATE SESSION

CONNECT                        CREATE SYNONYM

CONNECT                        CREATE SEQUENCE

CONNECT                        CREATE DATABASE LINK

RESOURCE                       CREATE TYPE

RESOURCE                       CREATE TABLE

RESOURCE                       CREATE CLUSTER

 

ROLE                           PRIVILEGE

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

RESOURCE                       CREATE TRIGGER

RESOURCE                       CREATE OPERATOR

RESOURCE                       CREATE SEQUENCE

RESOURCE                       CREATE INDEXTYPE

RESOURCE                       CREATE PROCEDURE

 

16 rows selected.

 

위의 결과를 확인 한 결과

CONNECT – CREATE VIEW, CREATE TABLE, ALTERSESSION, CREATE CLUSTER,

CREATE SESSION, CREATE SYNONYM, CREATESEQUENCE, CREATE DATABASE LINK 가 존재하는 걸 확인하였고

 

RESOURCE – CREATE TYPE, CREATE TABLE, CREATECLUSTER, CREATE TRIGGER, CREATE OPERATOR, CREATE SEQUENCE, CREATE INDEXTYPE,CREATE PROCEDURE 가 있는 걸 확인하였다.

 

Beginning Oracle 책을 보면 RESOURCE ROLE UNLIMITED TABLESPACE  시스템권한이 있기 때문에 가급적 사용하지 않는 것이 좋다고 한다. 위에서 확인한 결과에서는 위의 권한을 볼수 없다. 위 쿼리를 사용한 오라클 버전은 9.2.0.4.0 이다. ( 버전업되면서 사라진 듯 하다 )

 

D.  특정 유저가 가진 롤과 권한을 확인하는쿼리 ( 위의과정을 합친 쿼리이다. )

SQL> !cat f_user_role.sql

select role,privilege from role_sys_privs

where role in ( select granted_role fromdba_role_privs

where grantee like upper('%&USER_NAME%'));

/