不知道密码的情况下重置Oracle过期帐号密码

最近有网友问到,如何在不知道密码的情况下,重置Oracle过期被锁帐号密码。

之所以要重置,而不是修改;是因为该帐号被很多下游系统所使用,如果修改了密码下游系统也需要进行修改,比较麻烦。

同时,由于年代久远,也没有人知道该帐号的密码。。。。。


那有没有办法在不知道、且不修改密码的情况下重置密码呢?

答案是肯定的,方法如下:

注:如下操作需要使用sysdba进行(因为需要查询user$ 表)


1、首先查询帐号当前的状态

SELECT username, account_status, expiry_date
 FROM dba_users
 WHERE username = 'TEST_USER';
 

USERNAME
--------------------------------------------------------------------------------
ACCOUNT_STATUS                   EXPIRY_DATE
-------------------------------- -------------------
TEST_USER
EXPIRED & LOCKED                 2017_11_16:11:23:54


可以看到当前是过期+锁定状态


2、查询被锁帐号的密码密文

11g及以上

SQL>  select password from user$ where name='TEST_USER';

PASSWORD
--------------------------------------------------------------------------------
E00E2CB7754DD48E


10g

select password from dba_users where username='TEST_USER';


得到密文:E00E2CB7754DD48E


3、重置密码

SQL> alter user test_user identified by values 'E00E2CB7754DD48E';

User altered.


4、在次确认帐号状态

SQL> SELECT username, account_status, expiry_date
  2   FROM dba_users
  3   WHERE username = 'TEST_USER';

USERNAME
--------------------------------------------------------------------------------
ACCOUNT_STATUS                   EXPIRY_DATE
-------------------------------- -------------------
TEST_USER
LOCKED                           2018_05_15:11:26:57


可以看到,帐号的过期状态已经没有了,现在只剩下锁定状态


5、解锁帐号


SQL> alter user test_user account unlock;

User altered.


6、最后确认帐号状态


SQL> SELECT username, account_status, expiry_date
  2   FROM dba_users
  3   WHERE username = 'TEST_USER';

USERNAME
--------------------------------------------------------------------------------
ACCOUNT_STATUS                   EXPIRY_DATE
-------------------------------- -------------------
TEST_USER
OPEN                             2018_05_15:11:26:57


大功告成!




为了防止此帐号以后又被过期锁定,可以考虑对此特殊帐号创建一个单独的profile,并取消密码过期策略。

执行如下sql,查看帐号的profile

SQL> SELECT username,profile
  2   FROM dba_users
  3   WHERE username = 'TEST_USER';

USERNAME
--------------------------------------------------------------------------------
PROFILE
--------------------------------------------------------------------------------
TEST_USER
DEFAULT


可以看到是默认的DEFAULT PROFILE


SQL> SELECT resource_name,limit FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name in('PASSWORD_LIFE_TIME','FAILED_LOGIN_ATTEMPTS');

RESOURCE_NAME
--------------------------------
LIMIT
--------------------------------------------------------------------------------
FAILED_LOGIN_ATTEMPTS
10

PASSWORD_LIFE_TIME
180


可以看到,默认的DEFAULT PROFILE的密码过期时间是180天,最大密码错误次数为10次(超过帐号就会被锁定)


可以执行如下命令,将其修改为无限制


ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;


SQL> SELECT resource_name,limit FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name in('PASSWORD_LIFE_TIME','FAILED_LOGIN_ATTEMPTS');

RESOURCE_NAME
--------------------------------
LIMIT
--------------------------------------------------------------------------------
FAILED_LOGIN_ATTEMPTS
UNLIMITED

PASSWORD_LIFE_TIME
UNLIMITED


注间:上面是以默认的DEFAULT  PROFILE为例,大家应该根据自己的情况创建不同的PROFILE,有关如何创建PROFILE请自行查阅相关文章。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值