메뉴 건너뛰기

Korea Oracle User Group

Admin

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

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

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 뷰에 대해 내부 정의를 확인해 볼 필요가 있다.

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

 


 

위로