강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

SQL*PLUS를 통한 SQL문 사용 못하게 하기

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

SQL*PLUS를 통한 SQL문 사용 못하게 하기

 

t.gif
t.gif
아래의 글을 정리함
Locking Down SQL*Plus Security ( http://www.databasejournal.com/features/oracle/article.php/3313231 )

sql*plus를 통한 create, insert등의 SQL문을 실행하지 못하도록 함.
sql*plus를 제외한 pro*c등의 응용프로그램들만이 접근하여 SQL문을 실행할 수 있음.
왜 이렇게 하나? SQL*Plus를 통한 ad hoc Query를 실행하지 못하도록 하려고
왜? 잘못 작성된 ad hoc Query는 리소스를 잡아먹는 경우가 있을 수 있고, 부주의한 사용자의 SQL문은 서비스에 치명적일 수 있다.
(Production DB에서의 잘못된 데이터의 delete나 update는 치명적이다. 누가 회원테이블의 데이터를 모두 delete해버렸다면
우짤래? - 물론 9i부터 flashback Query가 지원되어 이런 실수를 커버할 수 있을 수 있지만서도.. - 성가신 recovery를 해야 할 것이다.)

* Ad-hoc Query:
별거 없다.
응용프로그램등에서 사용되는 질의는 정형화되었다.
코딩시 작성하는 SQL문은 나름대로 튜닝도 하고 해서 성능에 문제가 없는 것들만 사용한다.
물론 어설픈 프로그래머나 DBA가 일하고 있는 곳이라면 문제가 있겠지만..
암튼 이런 정형화된 질의문이 아닌 우리가 필요할 때 그냥 던지는 질의를 ad-hoc Query라고 한다.
따라서, 보통 TOAD나 SQL*PLUS상에서 작성하는 SQL문은 ad-hoc Query라고 보면 되겠다.


단점:
SQL*Plus를 제외한 TOAD등의 툴에서 하면 대책없음.
SQL*Plus를 사용하지만, DATABASE link를 통한 SQL문은 막을 수 없음.

나의 생각
이것은 단순한 접근제어만을 제공하나 간편하게 쓸수 있으므로 유용할 수도 있다.
좀 더 세밀한(Fine-grained) 접근제어는 다른 방법을 통해 해야할 것이다.

SQL: ALTER, AUDIT, ANALYZE, CREATE, DELETE, DROP, INSERT, LOCK, NOAUDIT, RENAME, SELECT, UPDATE, VALIDATE, TRUNCATE, GRANT, REVOKE, SET ROLE, SET TRANSACTION
PL/SQL:DECLARE, BEGIN
SQL*PLUS: COPY, HOST, SET, EDIT, PASSWORD, SPOOL, EXECUTE, QUIT, START, EXIT, RUN, GET, SAVE

SQL*PLUS상에서 kang이라는 유저가 insert, update, delete, create SQL문을 사용하지 못하게 함
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'INSERT', 'DISABLED');
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'UPDATE', 'DISABLED');
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'DELETE', 'DISABLED');
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'CREATE', 'DISABLED');

SQL*PLUS상에서 kang이라는 유저가 DBA Role을 사용하지 못하게 함
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'ROLES', 'DBA');

SQL*PLUS상에서 kang이라는 유저가 PL/SQL문을 사용하지 못하게 함 (PL/SQL문이 DECLARE..BEGIN..END 구성되어 있음을 상기하세요)
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'DECLARE', 'DISABLED');
insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'BEGIN', 'DISABLED');


실습예
SQL> conn system/xxxxxx
Connected.
SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'INSERT', 'DISABLED');

1 row created.

SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'UPDATE', 'DISABLED');

1 row created.

SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'DELETE', 'DISABLED');

1 row created.

SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'CREATE', 'DISABLED');

1 row created.

SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'ROLES', 'DBA');

1 row created.

SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'DECLARE', 'DISABLED');

1 row created.

SQL> insert into PRODUCT_USER_PROFILE(product, userid, attribute, char_value) values('SQL*Plus', 'KANG', 'BEGIN', 'DISABLED');

1 row created.

SQL> commit;

Commit complete.

SQL> CONN kang/xxxxxx
Connected.

create가 안된다.
SQL> create table test (a number);
SP2-0544: Command "create" disabled in Product User Profile
SQL>

This article comes from dbakorea.pe.kr (Leave this line as is)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,848 개
  • 현재 접속자 :  89 명