不修改用户密码的前提下,解锁用户
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 #扩展:可以修改上述:密码登录错误后,允许尝试连接次数,修改无限制:慎重
2.0.19C_12C后 USER$基表PASSWD 隐藏使用SPARE4,本质与上述情况相同
SQL> select username,PASSWORD from dba_users where username='TT'; USERNAME PASSWORD ---------- -------------------- TT SQL> alter user TT identified by tt; SQL> select name,SPARE4 from user$ where name='TT'; NAME SPARE4 ------------------------------------------------------------------------------------------------------------------------ TT S:134EF36DAD8F80789EF1A0300578E90D101166791E2FCA004DE1881D6BF2;T:E00A1212D37A709DA6645EEC923832BD93A5F98787CDCC04CB599FD 8BBDF1304804F26AC470C8FCFF455F3EE6B962105B61C0E2A561C1BD8087CED910169E903B5D759386AB82AEB6C23529D851D1D15 SQL> alter user cc identified by values 'S:134EF36DAD8F80789EF1A0300578E90D101166791E2FCA004DE1881D6BF2;T
:E00A1212D37A709DA6645EEC923832BD93A5F98787CDCC04CB599FD8BBDF1304804F26AC470C8FCFF455F3EE6B962105B61C0E2A561C1BD8
087CED910169E903B5D759386AB82AEB6C23529D851D1D15'; $ sqlplus cc/tt@192.168.60.45:1521/pp1 SQL>