1. 程式人生 > >不修改用戶密碼的前提下,解鎖用戶

不修改用戶密碼的前提下,解鎖用戶

超出 宋體 登陸 enter LV pl/sql error: status login

不修改用戶密碼的前提下,解鎖用戶

1.0需求:某用戶通知,無法登陸,用戶被鎖定,但是密碼不知道 或者 不告訴你

1.1:用戶被鎖定:幾種可能性

A用戶使用默認Pfile概要文件,其中參數:

-- PASSWORD_LIFE_TIME 180 密碼有效保留時間

B用戶使用默認Pfile概要文件,其中參數:

-- FAILED_LOGIN_ATTEMPTS 10 登錄失敗後,允許嘗試登錄的次數

-- PASSWORD_LOCK_TIME 1 登錄失敗後,超出限制,賬戶鎖定天數

C 用戶使用的自定義設置:本次實驗不做考慮

1.2故障模擬

#創建測試用戶

SQL> create user yang identified by asfqr1rfa10;

#鎖定用戶

SQL> alter user yang account lock;

#PL/SQL登陸報錯

SQL*Plus登陸報錯

SQL> conn yang/asfqr1rfa10;

ERROR:

ORA-28000:

Warning: You are no longer connected to ORACLE.

#查詢報錯解釋說明

SQL> !oerr ora 28000

28000, 00000, "the account is locked"

// *Cause: The user has entered wrong password consequently for maximum

// number of times specified by the user‘s profile parameter

// FAILED_LOGIN_ATTEMPTS, or the DBA has locked the account

// *Action: Wait for PASSWORD_LOCK_TIME or contact DBA

#輸入錯誤的密碼,超出允許輸入錯誤次數的範圍,用戶被鎖定

#DBA鎖定 請聯系DBA

1.3解決思路

1.3.1查詢信息

# SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;

SQL> select USERNAME,PASSWORD,ACCOUNT_STATUS,LOCK_DATE,PROFILE from dba_users where username =‘YANG‘;

YANG 用戶

LOCKED 鎖定

2018-01-14 01:25:21 鎖定時間

DEFAULT 概要文件默認

1.3.2 查詢用戶密碼 hash後的值

SQL>select name,password from user$ where name=‘YANG‘

NAME PASSWORD

---------- ------------------------------------------------------------

YANG BF382C1C900CB086

1.3.2使用密碼hash值解鎖用戶,密碼不修改

SQL> alter user yang identified by values ‘BF382C1C900CB086‘ account unlock;

1.3.3驗證

SQL> conn yang/asfqr1rfa10

Connected.

1.3.4設置密碼永不過期

默認概要文件180天過期,可以修改概要文件參數

#查詢用戶賬戶密碼到期時間

SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;

SQL> select username,expiry_date from dba_users where username in(‘HR‘,‘YANG‘);

USERNAME EXPIRY_DATE

------------------------------------------------------------ -------------------

YANG 2018-07-13 01:49:18

HR 2018-07-12 06:09:24

SQL> select sysdate from dual;

2018-01-14 01:55:04

#修改無限制OK

alter profile default limit password_life_time unlimited;

#查詢驗證

SQL> select username,expiry_date from dba_users where username in(‘HR‘,‘YANG‘);

USERNAME EXPIRY_DATE

---------- -------------------

YANG

HR

#擴展:可以修改上述:密碼登錄錯誤後,允許嘗試連接次數,修改無限制:慎重

不修改用戶密碼的前提下,解鎖用戶