메뉴 건너뛰기

Korea Oracle User Group

Admin

DB에 생성된 ROLE의 생성 정보 확인

명품관 2016.05.31 17:45 조회 수 : 897

DB에 생성된 ROLE의 생성 정보 확인 

 

가끔 ROLE의 생성 시기를 확인해야할 때가 있다. 
하지만 DBA_ROLES에는 Role에 대한 생성 시간이 나오지 않는다.  

이는 DBA_ROLE 뷰에 대해서 파헤쳐 보면 내용에 대해서 확인해 볼 수 있다.

 

먼저 DBA_ROLES을 조회하면 어떤 결과가 나올까?

 

SELECT *
FROM DBA_ROLES;

ROLE                                     PASSWORD AUTHENTICAT COM O
---------------------------------------- -------- ----------- --- -
CONNECT                                  NO       NONE        YES Y
RESOURCE                                 NO       NONE        YES Y
DBA                                      NO       NONE        YES Y
AUDIT_ADMIN                              NO       NONE        YES Y
AUDIT_VIEWER                             NO       NONE        YES Y
SELECT_CATALOG_ROLE                      NO       NONE        YES Y
EXECUTE_CATALOG_ROLE                     NO       NONE        YES Y
.
.
.

 

위와 같은 결과가 나온다.

그러나 생성일자와 시간에 대한 정보는 보이질 않는다.

 

그럼 DBA_ROLES 뷰에 대한 정의를 확인해 보자.
정의는 아래와 같다.

 

CREATE OR REPLACE FORCE VIEW SYS.DBA_ROLES
(
  ROLE
  ,PASSWORD_REQUIRED
  ,AUTHENTICATION_TYPE
)
AS
  SELECT NAME
       , DECODE(PASSWORD,  NULL, 'NO',  'EXTERNAL', 'EXTERNAL', 'GLOBAL', 'GLOBAL', 'YES')
       , DECODE(PASSWORD,  NULL, 'NONE',  'EXTERNAL', 'EXTERNAL',  'GLOBAL', 'GLOBAL', 'APPLICATION', 'APPLICATION',  'PASSWORD')
  FROM   USER$
  WHERE  TYPE# = 0
  AND  NAME NOT IN ('PUBLIC', '_NEXT_USER');

 

데이터를 확인해 보면 TYPE#=1 인 값은 User에 대한 정보이다.
TYPE#=0 인 데이터가 Role 인 것이다. 

 

그럼 USER$에 대한 컬럼 정보를 확인해 보자.

 

sys@testdb> desc sys.user$
 Name            Null?    Type
 --------------- -------- -------------------
 USER#           NOT NULL NUMBER
 NAME            NOT NULL VARCHAR2(128)
 TYPE#           NOT NULL NUMBER
 PASSWORD                 VARCHAR2(4000)
 DATATS#         NOT NULL NUMBER
 TEMPTS#         NOT NULL NUMBER
 CTIME           NOT NULL DATE
 PTIME                    DATE
 EXPTIME                  DATE
 LTIME                    DATE
 RESOURCE$       NOT NULL NUMBER
 AUDIT$                   VARCHAR2(38)
 DEFROLE         NOT NULL NUMBER
 DEFGRP#                  NUMBER
 DEFGRP_SEQ#              NUMBER
 ASTATUS         NOT NULL NUMBER
 LCOUNT          NOT NULL NUMBER
 DEFSCHCLASS              VARCHAR2(128)
 EXT_USERNAME             VARCHAR2(4000)
 SPARE1                   NUMBER
 SPARE2                   NUMBER
 SPARE3                   NUMBER
 SPARE4                   VARCHAR2(1000)
 SPARE5                   VARCHAR2(1000)
 SPARE6                   DATE
 SPARE7                   VARCHAR2(4000)
 SPARE8                   VARCHAR2(4000)
 SPARE9                   NUMBER
 SPARE10                  NUMBER
 SPARE11                  TIMESTAMP(6)

 

컬럼 정보에 CTIME이 존재한다. 
바로 CTIME 정보가 생성시간 정보에 해당한다.
즉, 아래의 SQL로 확인할 수 있다.

 

 SELECT NAME
       , CTIME
       , DECODE(PASSWORD,  NULL, 'NO',  'EXTERNAL', 'EXTERNAL', 'GLOBAL', 'GLOBAL', 'YES') PASSWORD_REQUIRED
       , DECODE(PASSWORD,  NULL, 'NONE',  'EXTERNAL', 'EXTERNAL',  'GLOBAL', 'GLOBAL', 'APPLICATION', 'APPLICATION',  'PASSWORD') AUTHENTICATION_TYPE
  FROM   USER$
  WHERE  TYPE# = 0
  AND  NAME NOT IN ('PUBLIC', '_NEXT_USER');
NAME                                     CTIME             PASSWORD AUTHENTICAT
---------------------------------------- ----------------- -------- -----------
CONNECT                                  20160204 14:43:14 NO       NONE
RESOURCE                                 20160204 14:43:14 NO       NONE
DBA                                      20160204 14:43:14 NO       NONE
AUDIT_ADMIN                              20160204 14:43:14 NO       NONE
AUDIT_VIEWER                             20160204 14:43:14 NO       NONE
SELECT_CATALOG_ROLE                      20160204 14:43:14 NO       NONE
EXECUTE_CATALOG_ROLE                     20160204 14:43:14 NO       NONE
.
.

 

간혹 DBA 뷰에 대해 내부 정의를 확인해 볼 필요가 있다.

실제로는 보이지 않는 다른 정보들이 보이기 때문에 이런 부분에 대해서 알아 두는 것이 도움이 될 때가 있다.

 


 

번호 제목 글쓴이 날짜 조회 수
34 Oracle Archive log 사용량 확인(GV$ARCHIVED_LOG) [1] 에밀리오 2016.08.04 11035
33 내가 돌린 SQL ID 찾기 [1] Talros 2016.05.12 8748
32 DBMS_SCHEDULER을 통해 OS 레벨(EXTERNAL)의 shell 수행하기 명품관 2017.04.05 5756
31 오라클 패치 정보를 조회할 수 있는 뷰 DBA_REGISTRY_SQLPATCH 명품관 2017.03.02 5412
30 Schema Password 복사 하기 Talros 2016.10.05 3233
29 Fixed Table에 대한 권한은 직접적으로 부여되지 않는다. 명품관 2016.08.26 2642
28 Oracle Resource Limit를 이용한 간단한 Parameter Check (GV$RESOURCE_LIMIT) 에밀리오 2016.07.15 2203
27 Partition 추가의 계절 - Range Partition 추가시 알아 두어야할 부분 [1] 명품관 2015.12.03 2153
26 Kill Session Script (GV$SESSION) 에밀리오 2016.07.12 2095
25 Alert Log를 SQL 사용하여 보기 (X$DBGALERTEXT) [1] 에밀리오 2016.01.28 1976
24 Pga 메모리 설정관련 내용 [1] 우뽕 2021.03.05 1742
23 Alert log 에서 갑자기 패치 정보가 나타나는 현상 Talros 2019.09.23 1598
22 테이블 컬럼의 Default 값에 대한 흔적은 Dictionary에 계속 남게 된다. 명품관 2016.04.05 1569
21 Block Cleanout(블럭 클린아웃) 명품관 2016.09.23 1444
20 [12cR2 이상] 오브젝트 이름 30자이상 사용 가능 우뽕 2020.01.22 1402
19 Schema password 재 사용 불가능 하게 하기 [1] Talros 2022.01.26 1193
18 DB option Enable / Disable 정리 방법 - Mos 참고 file 우뽕 2021.01.31 1186
17 Active Session History를 이용한 TOP SQL 분석 (GV$ACTIVE_SESSION_HISTORY) 에밀리오 2016.07.12 1173
16 RECO 프로세스 트레이스 발생 하면서 ORA-02019 에러 발생시 명품관 2021.01.12 951
15 External Table 기능을 사용해 파일 읽기 명품관 2017.04.05 947
위로