본문 바로가기
Oracle/운영

Restricted Session

by 취미툰 2020. 8. 22.
반응형

제한된 모드라고도 불리는 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로 표현됩니다.

반응형

댓글