ORACLE/ADMIN
[oracle]Column 단위로 권한 부여 하기
[PineTree]
2009. 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
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
반응형