Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-14
제목 PRODUCT_USER_PROFILE의 기능 (특정 SQL문 수행 못하도록 하는 방법)
PRODUCT_USER_PROFILE의 기능 (특정 SQL문 수행 못하도록 하는 방법)
================================================================


Purpose
-------
product_user_profile 의 기능과 사용방법에 대해 이해하도록 하자.


Explanation
-----------
system user가 아닌 일반 user로 SQL*Plus에 접속 시에 다음과 같은
warning message가 발생할 경우가 종종 있다.

Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM

이 때 취하는 조치사항은 ?/sqlplus/admin/pupbld.sql을 system user로
접속하여 수행하는 것이다.

아래에서는 pupbld.sql의 수행에 의해서 생성되는 object들의 기능은
무엇인지를 간략하게 살펴본다.


* PRODUCT_USER_PROFILE

1. 개요

grant, revoke SQL문을 이용한 user-level의 보안에 추가하여,
Oracle product들은 PRODUCT_USER_PROFILE table을 이용하여
보안 관리를 할 수 있다.
예를 들어 SQL*Plus는 user가 login하는 시점에 PRODUCT_USER_
PROFILE을 읽어서 해당 session이 특정 명령문을 수행할 수 없도록
제한을 가할 수 있다.(RDBMS가 아닌 SQL*Plus가 제한을 가한다는
점에 유의)

2. Table 생성

unix의 경우 보통 ?/sqlplus/pupbld.sql을 system user로 수행함
으로써 생성된다.
** system user는 PRODUCT_USER_PROFILE에 의한 제한을 받지 않기
때문에 login시 이 table에 access를 하지 않는다. 반면 일반
user가 login시에는 PRODUCT_USER_PROFILE에 access를 한다.
이러한 이유로 PRODUCT_USER_PROFILE이 생성되어 있지 않으면,
system user로 login할 때는 문제가 없으나 일반 user로 login할
때는 warning message가 발생하게 된다.

3. Table 구조

product : product name 예) SQL*Plus
userid : 특정 command의 사용을 제한하고자 하는 user의 username.
wildcard(%)사용가능
attribute : 제한하고자 하는 command, 특정 role의 사용을 제한하려면
ROLES로 set
scope : SQL*Plus에서는 사용하지 않음
numeric_value : SQL*Plus에서는 사용하지 않음
char_value : 제한하려는 것이 command일 경우는 DISABLED로 set,
role일 경우는 role name을 set
date_value : SQL*Plus에서는 사용하지 않음
long_value : SQL*Plus에서는 사용하지 않음


Example
-------
NUMERIC CHAR DATE
PRODUCT USERID ATTRIBUTE SCOPE VALUE VALUE VALUE
--------------------------------------------------------------
SQL*Plus SCOTT HOST DISABLED
SQL*Plus % INSERT DISABLED
SQL*Plus SCOTT ROLES ROLE1

위의 예에 의하면
scott user는 host라는 sqlplus 명령어를 사용할 수 없으며, role1
이라는 role을 사용할 수 없다.
또한, system user를 제외한 모든 user들은 insert SQL문을 사용할
수 없다.

* 모든 유저에게 truncate 를 못하게 하는 방법

insert into PRODUCT_USER_PROFILE(product,userid,attribute,char_value)
values('SQL*Plus','%','TRUNCATE','DISABLED');

위의 결과
SQL> truncate table table_name;
invalid command: truncate

PRODUCT_USER_PROFILE 는 PRODUCT_PROFILE 의 synonym 입니다.


Reference Document
------------------
SQL*Plus User's Guide and Reference
Comment
등록된 코멘트가 없습니다.