暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

刷新数据库密码

酒负盛名的笔记 2018-01-12
250

    某天,应用管理员跑过来说应用挂了,重启中间件报错,和上次挂的情况一样,就是数据库用户密码过期了。乍一想,好办,改密码重启中间件就解决了。但问题来了,应用开会暂时联系不上,在不知道数据库用户密码的情况下怎样刷新密码让其正常使用呢?如果是locked状态还好办, sysdba直接执行alter user 用户名 account unlock 就可以了.但是如果变成expired状态,  因为账户过期,必须要用户更改密码, 账户才能重新使用. 下面将介绍在不修改密码而且不知道密码的情况下,刷新数据库用户密码的方法。

     惯例,环境介绍和常用的一个表dba_users:表里面有用户名和加密的密文(有些版本此字段为空,但也不影响,比如本实验环境就是如此)

1. 用数据库用户密码的密文来更改密码:

    实验的版本dba_users的password字段为空,通过PL/SQL DEVELOPER查看一下dba_users的构成:

  可以看出password来自user$表,继续查看user$表

   这就简单了,修改为原来的密码进行刷新:

  这种情况下,虽然我们不知道原密码是什么,但可以用它的密文来更改密码,这样,在不知道原密码的情况下,既保持了密码不改变, 又可以把expired的状态更改掉,应用启动,正常使用。

2.  网上的其它方法

  下面这一条语句搞定,不管用户的状态是什么:

  UPDATE USER$ SET ASTATUS=1 WHERE NAME='SH';  

  原理详解:

   用户的信息都是存在user$这样一个系统表里面的,而用户ASTATUS对应的表 为:user_astatus_map

关键是user$表本身是可以更改的, 所以此时我们就可以直接把用户的ASTATUS字段改成0就可以了。

但个人不喜欢这种方法,因为官方文档的Reference没有对此系统表的说明。方法一执行的语句可能还在后台执行了其它动作,方法二语句可能会忽视了其它动作。作为一个DBA,要严谨,避免挖坑给自己。



        总结:oracle刷新密码可以用语句alter user username identified by values '密码的密文'来刷新,密码的密文可以在系统表user$的password字段找到。



文章转载自酒负盛名的笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论