ORACLE 현재 계 정 관련 정보 보기
SQL> DESC DBA_USERS;
Name Null? Type
----------------------------------------- -------- ----------------------------
USERNAME NOT NULL VARCHAR2(30)
USER_ID NOT NULL NUMBER
PASSWORD VARCHAR2(30)
ACCOUNT_STATUS NOT NULL VARCHAR2(32)
LOCK_DATE DATE
EXPIRY_DATE DATE
DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)
CREATED NOT NULL DATE
PROFILE NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)
EXTERNAL_NAME VARCHAR2(4000)
사실 저희 가 자주 쓰 는 DBAUSERS 는 동의어 로 SYS.DB 에 대응 합 니 다.USERS 이 보기.SYS.DB 를 보고 싶다 면USERS 의 정 의 는 다음 과 같은 방식 으로 할 수 있 습 니 다.
--ORACLE 10g
SQL>SELECT DBMS_METADATA.GET_DDL('VIEW', 'DBA_USERS', 'SYS') FROM DUAL;
CREATE OR REPLACE FORCE VIEW "SYS"."DBA_USERS" (
"USERNAME"
, "USER_ID"
, "PASSWORD"
, "ACCOUNT_STATUS"
, "LOCK_DATE"
, "EXPIRY_DATE"
, "DEFAULT_TABLESPACE"
, "TEMPORARY_TABLESPACE"
, "CREATED"
, "PROFILE"
, "INITIAL_RSRC_CONSUMER_GROUP"
, "EXTERNAL_NAME") AS
select u.name, u.user#, u.password,
m.status,
decode(u.astatus, 4, u.ltime,
5, u.ltime,
6, u.ltime,
8, u.ltime,
9, u.ltime,
10, u.ltime, to_date(NULL)),
decode(u.astatus,
1, u.exptime,
2, u.exptime,
5, u.exptime,
6, u.exptime,
9, u.exptime,
10, u.exptime,
decode(u.ptime, '', to_date(NULL),
decode(pr.limit#, 2147483647, to_date(NULL),
decode(pr.limit#, 0,
decode(dp.limit#, 2147483647, to_date(NULL), u.ptime +
dp.limit#/86400),
u.ptime + pr.limit#/86400)))),
dts.name, tts.name, u.ctime, p.name,
nvl(cgm.consumer_group, 'DEFAULT_CONSUMER_GROUP'),
u.ext_username
from sys.user$ u left outer join sys.resource_group_mapping$ cgm
on (cgm.attribute = 'ORACLE_USER' and cgm.status = 'ACTIVE' and
cgm.value = u.name),
sys.ts$ dts, sys.ts$ tts, sys.profname$ p,
sys.user_astatus_map m, sys.profile$ pr, sys.profile$ dp
where u.datats# = dts.ts#
and u.resource$ = p.profile#
and u.tempts# = tts.ts#
and u.astatus = m.status#
and u.type# = 1
and u.resource$ = pr.profile#
and dp.profile# = 0
and dp.type#=1
and dp.resource#=1
and pr.type# = 1
and pr.resource# = 1
위의 보기 정 의 를 통 해 대부분의 데 이 터 는 기본 표 sys.user$에서 나 온 다 는 것 을 알 수 있 습 니 다.표 sys.user$의 구 조 는 다음 과 같 습 니 다.sql.bsq 에서 sys.user$의 정 의 를 볼 수 있 습 니 다.
SQL> DESC sys.user$
Name Null? Type
----------------------------------------- -------- ----------------------------
USER# NOT NULL NUMBER
NAME NOT NULL VARCHAR2(30)
TYPE# NOT NULL NUMBER
PASSWORD VARCHAR2(30)
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(30)
EXT_USERNAME VARCHAR2(4000)
SPARE1 NUMBER
SPARE2 NUMBER
SPARE3 NUMBER
SPARE4 VARCHAR2(1000)
SPARE5 VARCHAR2(1000)
SPARE6 DATE
그 중에서 우 리 는 관건 적 인 필드 정 보 를 얻 을 수 있 습 니 다.구체 적 으로 다음 과 같 습 니 다.
NAME (User) (Role)
TYPE# 0 Role,1 User
CTIME
PTIME
EXPTIME
LTIME
LCOUNT 。
다음은 간단하게 테스트 를 통 해 검증 해 보 겠 습 니 다.
SQL> CREATE USER TEST IDENTIFIED BY "Test#1232134$#3" DEFAULT TABLESPACE TBS_TEST_DATA TEMPORARY TABLESPACE TEMP;
User created.
SQL> GRANT CONNECT TO TEST;
SQL> @get_user_info.sql
Session altered.
Enter value for user_name: TEST
old 9: WHERE NAME=('&USER_NAME')
new 9: WHERE NAME=('TEST')
NAME TYPE# CTIME PTIME EXPTIME LTIME LCOUNT
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
TEST 1 2021-06-10 14:10:01 2021-06-10 14:10:01 0
SQL> ALTER USER TEST IDENTIFIED BY "kER124";
User altered.
SQL> @get_user_info.sql
Session altered.
Enter value for user_name: TEST
old 9: WHERE NAME=('&USER_NAME')
new 9: WHERE NAME=('TEST')
NAME TYPE# CTIME PTIME EXPTIME LTIME LCOUNT
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
TEST 1 2021-06-10 14:10:01 2021-06-10 14:10:50 0
SQL> ALTER USER TEST ACCOUNT LOCK;
User altered.
SQL> @get_user_info.sql
Session altered.
Enter value for user_name: TEST
old 9: WHERE NAME=('&USER_NAME')
new 9: WHERE NAME=('TEST')
NAME TYPE# CTIME PTIME EXPTIME LTIME LCOUNT
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
TEST 1 2021-06-10 14:10:01 2021-06-10 14:10:50 2021-06-10 14:11:27 0
SQL>
그 중 getuser_info.sql 스 크 립 트 는 다음 과 같 습 니 다.
$ more get_user_info.sql
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SELECT NAME
, TYPE#
, CTIME
, PTIME
, EXPTIME
, LTIME
, LCOUNT
FROM user$
WHERE NAME=('&USER_NAME');
또한,계 정 로그 인 실패 횟수 를 테스트 해 보 겠 습 니 다.실험 전에 계 정 잠 금 을 풀 고 잘못된 계 정 비밀번호 로 데이터 베 이 스 를 로그 인 하려 고 시도 하면 LCOUNT 가 1 이 되 는 것 을 발견 할 수 있 습 니 다.
SQL> @get_user_info.sql
Session altered.
Enter value for user_name: TEST
old 9: WHERE NAME=('&USER_NAME')
new 9: WHERE NAME=('TEST')
NAME TYPE# CTIME PTIME EXPTIME LTIME LCOUNT
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
TEST 1 2021-06-10 14:10:01 2021-06-10 14:10:50 2021-06-10 14:11:27 1
SQL>
그러면 이 LCOUNT 필드 의 값 은 한도 값 잠 금 을 초과 할 때 까지 계속 누 적 됩 니까?아니면 중간 에 없 앨 까요?어떤 상황 에서 0 이 되 나 요?정확 한 비밀 번 호 를 사용 하여 데이터베이스 에 성공 적 으로 로그 인 하면 LCOUNT 의 값 이 0 이 되 는 것 을 발견 할 수 있 습 니 다.다음 캡 처 에서 보 듯 이:
$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jun 10 14:30:41 2021
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> connect TEST
Enter password:
Connected.
잠 그 기 전에 로그 인 에 성공 하면 이 계산 은 0 이 된다 는 것 이다.일부 버 전에 서 는 버그 로 인해 LCOUNT 가 로그 인 실패 횟수 를 제대로 반영 하지 않 은 경우 도 있 습 니 다.예 를 들 어 Lcount nor reset on correct login nor incremented after incorrect login thru JDBC(Doc ID 267539.8.1)에 이러한 버그 가 기록 되 어 있 습 니 다.또한,ORACLE 12C 이후 사용자 의 마지막 로그 인 시간 을 기록 하 는 기능 이 추가 되 었 습 니 다.SPARE 6 필드 는 사용자 의 마지막 로그 인 시간 을 기록 합 니 다.
참고 자료:
https://www.eygle.com/archives/2009/07/profile_failed_login_attempts.html
https://dbaora.com/sys-user-table-in-oracle-last-password-change-time-last-locked-last-expired-creation-time-failed-logon/
Lcount neither reset on correct login nor incremented after incorrect login thru JDBC (Doc ID 2675398.1)
https://bijoos.com/oraclenotes/2013/153/
이상 은 바로 ORACLE 가 현재 계 정의 관련 정 보 를 어떻게 조회 하 는 지 에 대한 상세 한 내용 입 니 다.Oacle 이 현재 계 정 정 정 보 를 조회 하 는 데 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.