제한된 모드라고도 불리는 Restricted Session은 Restriced Session 권한이 없는 다른 유저의 접속을 제한하여, 데이터베이스 관리자가 작업을 용이하게 할 수 있게 해주는 DDL 명령어입니다.
사용방법은 startup 시 startup restrict 명령어로 시작하는 방법과 Open된 상태에서 alter system enable restricted session 명령어로 변경하는 방법 두가지가 있습니다.
확인은 v$instance 뷰의 logins컬럼으로 확인이 가능합니다. ALLOWED는 일반적인 상태이고 RESTRICTED는 제한된 모드입니다.
1.startup 시
SYS@ysbae> startup restrict
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 8622776 bytes
Variable Size 687869256 bytes
Database Buffers 1442840576 bytes
Redo Buffers 8151040 bytes
Database mounted.
Database opened.
SYS@ysbae> select logins from v$instance;
LOGINS
----------
RESTRICTED
1 row selected.
2.Open된 상태에서
SYS@ysbae> select logins from v$instance;
LOGINS
----------
ALLOWED
1 row selected.
SYS@ysbae> alter system enable restricted session;
System altered.
SYS@ysbae> select logins from v$instance;
LOGINS
----------
RESTRICTED
1 row selected
시나리오. restricted session 권한이 없는 유저(scott)가 restricted session 모드에서 접속이 가능하게 하라.
1.세션1에서 제한된 모드로 설정합니다.
SYS@ysbae> alter system enable restricted session;
System altered.
SYS@ysbae> select logins from v$instance;
LOGINS
----------
RESTRICTED
2.세션2에서 scott으로 접속하여 봅니다. ORA-01035에러를 발생시키며 세션접속이 끊깁니다.
SYS@ysbae> conn scott/tiger
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
Warning: You are no longer connected to ORACLE.
하지만 세션2에서 sys유저는 접속이 가능합니다.
[oracle@ysbae ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 21 23:41:25 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
3.세션1에서 restricted session권한이 있는 유저 및 롤을 확인하고 scott에 부여해줍니다.
SYS@ysbae> select * from dba_sys_privs where privilege like '%RESTRICT%';
GRANTEE PRIVILEGE ADM COM INH
----------------------------------------------- ---------------------------------------- --- --- ---
DBA RESTRICTED SESSION NO NO NO
SYS RESTRICTED SESSION NO NO NO
2 rows selected.
restricted session 권한을 가진 dba 롤을 scott에 줍니다.
SYS@ysbae> grant dba to scott;
Grant succeeded.
4.세션2에서 다시 scott유저로 접속을 시도합니다.
[oracle@ysbae ~]$ sqlplus scott/tiger
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 21 23:43:44 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Mon Aug 17 2020 22:34:26 +09:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SCOTT@ysbae>
끝.
============================================================================
시나리오2. 이미 접속된 세션에서 제한된 모드로 변경되면 접속이 끊기는지 확인해보자
시나리오1에서 테스트했던 환경을 원복 합니다.
SYS@ysbae> alter system disable restricted session;
System altered.
SYS@ysbae> select logins from v$instance;
LOGINS
----------
ALLOWED
SYS@ysbae> revoke dba from scott;
Revoke succeeded.
1.세션2에서 scott유저로 접속하여 DML작업을 수행합니다.
SCOTT@ysbae> conn scott/tiger
SCOTT@ysbae> update test_emp set sal=0;
14 rows updated.
2.세션1에서 제한된 모드로 변경합니다.
SYS@ysbae> alter system enable restricted session;
System altered.
SYS@ysbae> select logins from v$instance;
LOGINS
----------
RESTRICTED
1 row selected.
3.세션2의 접속이 끊겼는지 확인해봅니다.
SCOTT@ysbae> select * from test_emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 0 (null) 20
7499 ALLEN SALESMAN 7698 20-FEB-81 0 300 30
7521 WARD SALESMAN 7698 22-FEB-81 0 500 30
7566 JONES MANAGER 7839 02-APR-81 0 (null) 20
7654 MARTIN SALESMAN 7698 28-SEP-81 0 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 0 (null) 30
7782 CLARK MANAGER 7839 09-JUN-81 0 (null) 10
7788 SCOTT ANALYST 7566 19-APR-87 0 (null) 20
7839 KING PRESIDENT (null) 17-NOV-81 0 (null) 10
7844 TURNER SALESMAN 7698 08-SEP-81 0 0 30
7876 ADAMS CLERK 7788 23-MAY-87 0 (null) 20
7900 JAMES CLERK 7698 03-DEC-81 0 (null) 30
7902 FORD ANALYST 7566 03-DEC-81 0 (null) 20
7934 MILLER CLERK 7782 23-JAN-82 0 (null) 10
14 rows selected.
SAL의 값을 0으로 UPDATE했는것이 그대로 보이고 있습니다. 즉, 세션은 살아있는것을 확인할 수 있습니다.
SCOTT@ysbae> commit;
Commit complete.
commit도 가능합니다.
4.세션3에서 scott유저 접속을 시도해봅니다. 에러를 발생시키며 되지 않습니다.
SYS@ysbae> conn scott/tiger
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
Warning: You are no longer connected to ORACLE.
5. 세션1에서 v$session의 정보를 확인해봅니다.
SID SERIAL# USERNAME STATUS
---------- ---------- ------------------------------------
1 3579 (null) ACTIVE
2 49200 (null) ACTIVE
3 8513 (null) ACTIVE
4 53844 (null) ACTIVE
5 63671 (null) ACTIVE
6 53318 (null) ACTIVE
8 12083 (null) ACTIVE
9 50918 (null) ACTIVE
10 41841 (null) ACTIVE
11 33094 (null) ACTIVE
12 39407 (null) ACTIVE
13 26498 SYS ACTIVE
14 62351 (null) ACTIVE
15 39531 (null) ACTIVE
16 53684 (null) ACTIVE
17 21145 (null) ACTIVE
18 36933 (null) ACTIVE
19 50631 (null) ACTIVE
20 8068 (null) ACTIVE
21 48392 (null) ACTIVE
22 33415 (null) ACTIVE
23 62965 (null) ACTIVE
24 56065 (null) ACTIVE
25 48468 (null) ACTIVE
27 14887 (null) ACTIVE
30 5554 (null) ACTIVE
31 4377 (null) ACTIVE
33 54258 (null) ACTIVE
35 14544 (null) ACTIVE
36 29206 SCOTT INACTIVE
37 46580 (null) ACTIVE
38 1584 (null) ACTIVE
39 62070 (null) ACTIVE
40 62965 (null) ACTIVE
41 14515 (null) ACTIVE
44 44489 (null) ACTIVE
45 7511 (null) ACTIVE
50 4896 (null) ACTIVE
51 18118 (null) ACTIVE
55 61127 (null) ACTIVE
56 9570 (null) ACTIVE
58 6693 (null) ACTIVE
69 3369 (null) ACTIVE
74 59430 SYS ACTIVE
82 9159 (null) ACTIVE
SCOTT유저인 세션은 INACTIVE입니다. 하지만 세션은 살아있어서 DML작업과 SELECT가 가능한 것을 확인할 수 있습니다. (INACTIVE는 연결은 되어 있지만 작업은 하지 않는 상태를 의미합니다)
결론 : 이미 접속되어 있는 세션이 있는 상태에서 제한된 모드로 변경하더라도 이미 접속된 세션은 끊기지 않고 작업이 가능합니다. v$session에서는 INACTIVE로 표현됩니다.
'Oracle > 운영' 카테고리의 다른 글
NUMBER 데이터타입과 데이터타입 변경 (3) | 2020.08.26 |
---|---|
컬럼사이즈 변경 및 데이터타입 변경 (0) | 2020.08.25 |
Offset , Limit (페이징 처리) (0) | 2020.08.19 |
Shared lock과 Execlusive lock (0) | 2020.08.17 |
트랜잭션 격리 수준(isolation level) (0) | 2020.08.17 |
댓글