ORACLE/ADMIN2009. 4. 6. 09:17
반응형
결론 :
1. Oracle 에서 칼럼 단위로 권한 부여가 가능한것은 Insert , Update 에 대해서다
2. Delete 의 경우 Row의 구성 Column 전체에 대한 작업이니 칼럼 단위 권한 부여 자체가 불가능한것으로 생각된다.
3. select 의 경우 View 를 통한 대체가 가능하다.
         

SYS> create table myemp as select * from scott.emp ;

SYS> grant select on myemp to scott ;

SYS> grant update ( sal ) on myemp to scott ;

SYS> create public synonym myemp for myemp ;

SCOTT> select * from myemp ;
==> 조회 가능

SCOTT>delete myemp ;
delete myemp
       *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 삭제 불가능

SCOTT>insert into myemp ( empno, ename) values ( 9999, ’TG’);
insert into myemp ( empno, ename) values ( 9999, ’TG’)
            *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 입력 불가능

SCOTT>update myemp  set ENAME=’TG’ where empno=7369 ;
update myemp  set ENAME=’TG’ where empno=7369
       *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 권한 없는 칼럼 Update 불가능

SCOTT>update myemp  set sal = sal*2 where EMPNO=7369;
1 row updated.
==> 권한 있는 칼럼 Update 가능

SYS>grant update (job) on myemp to scott ;
Grant succeeded.
==> 다른 칼럼에 대한 Update 권한 추가적으로 부여

-- 칼럼에 대한 선택적인 권한 부여가 가능하다.

[ 추가 테스트 ]
1. 선택적 Column 에 대한 Select 권한 부여
SYS>grant select ( empno, ename ) on emp to scott ;
grant select ( empno, ename ) on emp to scott
             *
ERROR at line 1:
ORA-00969: missing ON keyword


SYS>grant select ( empno ) on emp to scott ;
grant select ( empno ) on emp to scott
             *
ERROR at line 1:
ORA-00969: missing ON keyword

==> Select 권한에 대해서는 칼럼 단위로 권한을 부여 할수 없다.

2. 선택적 Column 에 대한 Insert 권한 부여
SYS>grant insert ( empno, ename ) on myemp to scott ;
Grant succeeded.

SCOTT>insert into myemp ( empno,ename) values (9999,’TG’);
1 row created.
==> 권한 있는 칼럼에 대한 Insert 가능
SCOTT>insert into myemp ( empno,ename,job) values (9998,’TG2’,’Clerk’);
insert into myemp ( empno,ename,job) values (9998,’TG2’,’Clerk’)
            *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 권한 없는 칼럼에 대한 Insert 불가능

3. 권한 체크

SYS>select GRANTEE, TABLE_NAME, PRIVILEGE from dba_Tab_privs where table_name =’MYEMP’;
no rows selected

SYS> select GRANTEE, TABLE_NAME, COLUMN_NAME, PRIVILEGE
     from dba_col_privs where table_name =’MYEMP’
     order by TABLE_NAME, PRIVILEGE,COLUMN_NAME, GRANTEE ;

GRANTEE      TABLE_NAME    COLUMN_NAME  PRIVILEGE
------------ ------------- ------------ ----------
SCOTT        MYEMP         ENAME        INSERT
SCOTT        MYEMP         EMPNO        INSERT
SCOTT        MYEMP         SAL          UPDATE
SCOTT        MYEMP         JOB          UPDATE

출처 : http://www.oracleclub.com/article/24483
반응형
Posted by [PineTree]