
💡 유저의 패스워드를 더 엄격하게 관리하고 싶거나 유저의 db 리소스 사용을 제한하고 싶을 때 사용
을지로에 있는 모 은행의 사례:
업무시간에 악성 SQL이 자꾸 수행 되어서 오라클에 접속한 유져들이 아무것도 못하는 일이 반복되니까
그 은행 DBA가 아침 9:00 ~ 저녁 6:00 까지는 악성 SQL 자체가 아예 실행 안되게 막아 버림
💡
1. 리소스(resource) 관리(리소스 소비 제어)
★ resource_limit 파라미터에 영향을 받음
2. 패스워드(password) 관리(계정 상태 및 암호 만료 관리)
★ resource_limit 파라미터에 영향을 받지 않음 (ocp시험문제)
0. sqlplus에 scott 으로 접속해서 다음과 같이 조회합니다.
[oracle@ora19c ~]$ sqlplus scott/tiger
SQL*Plus: Release 19.0.0.0.0 - Production on 수 9월 3 14:10:47 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 화 9월 02 2025 14:49:07 +09:00
다음에 접속됨:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SCOTT @ ORA19 > set autot on
SCOTT @ ORA19 >
SCOTT @ ORA19 >
SCOTT @ ORA19 > select *
2 from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Execution Plan
----------------------------------------------------------
---------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
---------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4 | 120 | 3 (0)|
| 1 | TABLE ACCESS FULL| DEPT | 4 | 120 | 3 (0)|
---------------------------------------------------------------
Note
-----
- 'PLAN_TABLE' is old version
Statistics
----------------------------------------------------------
29 recursive calls
15 db block gets
66 consistent gets
6 physical reads
3108 redo size
858 bytes sent via SQL*Net to client
391 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
4 rows processed
1. 오랜지에 scott으로 접속해서 dept 테이블을 select 했을 때 읽어들이는 블럭의 갯수를 확인하시오
select * from dept;
2. sys 유져로 들어와서 악성 sql이 수행 안되게 profile을 적용합니다.
[oracle@ora19c ~]$ connect / as sysdba
SYS @ ORA19 > alter profile default limit
logical_reads_per_call 30;
SYS @ ORA19 > show parameter resource_limit
SYS @ ORA19 > alter system set resource_limit=true;
3. scott 으로 접속해서 악성 sql을 수행해봅니다.
SYS @ ORA19 > connect scott/tiger
연결되었습니다.
SCOTT @ ORA19 > select count(*)
2 from emp, emp, emp, emp, emp, emp, emp, emp;
from emp, emp, emp, emp, emp, emp, emp, emp
*
2행에 오류:
ORA-02395: IO 사용에 대한 호출 한계치를 초과했습니다
4. 다시 악성 SQL이 수행될 수 있도록 하시오
SCOTT @ ORA19 > connect / as sysdba
연결되었습니다.
SYS @ ORA19 > alter profile default limit
2 logical_reads_per_call unlimited;
프로파일이 변경되었습니다.
5. scott 으로 접속해서 악성 SQL을 수행합니다.
SYS @ ORA19 > connect scott/tiger
연결되었습니다.
SCOTT @ ORA19 > select count(*) from emp, emp, emp, emp;
COUNT(*)
----------
38416
SCOTT @ ORA19 >
set autot onselect * from dept;
답:
SYS @ ORA19 > alter profile default limit
2 logical_reads_per_call 3;
프로파일이 변경되었습니다.
SYS @ ORA19 > show parameter resource_limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean TRUE
SYS @ ORA19 > alter system set resource_limit=true;
시스템이 변경되었습니다.
SYS @ ORA19 > connect scott/tiger
연결되었습니다.
SCOTT @ ORA19 > select count(*)
2 from dept, dept,dept,dept,dept,dept,dept,dept,dept,dept;
from dept, dept,dept,dept,dept,dept,dept,dept,dept,dept
*
2행에 오류:
ORA-02395: IO 사용에 대한 호출 한계치를 초과했습니다
SCOTT @ ORA19 > connect / as sysdba
연결되었습니다.
SYS @ ORA19 > alter profile default limit
2 logical_reads_per_call unlimited;
프로파일이 변경되었습니다.
SYS @ ORA19 > connect scott/tiger
연결되었습니다.
SCOTT @ ORA19 > select count(*) from dept, dept, dept, dept;
COUNT(*)
----------
256
SCOTT @ ORA19 >
SYS @ ORA19 > connect / as sysdba
연결되었습니다.
SYS @ ORA19 >
SYS @ ORA19 > alter profile default limit idle_time 1;
프로파일이 변경되었습니다.
SYS @ ORA19 >
SYS @ ORA19 > connect scott/tiger
연결되었습니다.
SCOTT @ ORA19 >
SCOTT @ ORA19 > select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SCOTT @ ORA19 > select count(*) from emp;
COUNT(*)
----------
13
-- 1분동안 아무것도 하지 않음
SCOTT @ ORA19 > /
select count(*) from emp
*
1행에 오류:
ORA-02396: 최대 유휴(idle) 시간을 초과했음. 다시 연결하십시오
SCOTT @ ORA19 > connect / as sysdba
연결되었습니다.
SYS @ ORA19 >
SYS @ ORA19 > alter profile default limit idle_time unlimited;
프로파일이 변경되었습니다.