一、 简介

Oracle用户的状态是由密码来决定的,而Oracle中的密码是由PROFILE来配置的。PROFILE是口令限制、资源限制的命令集合。当建立数据库时,Oracle会自动建立名称为DEFAULT的PROFILE。当创建用户而没有指定PROFILE选项时,Oracle就会将DEFAULT分配给用户。

通过如下的命令可以查出与密码相关的PROFILE的值:

 SELECT *FROM DBA_PROFILES DWHERE D.PROFILE = 'DEFAULT'AND (D.RESOURCE_NAME LIKE '%PASSWORD%' OR  D.RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS');

二、 profile参数含义

  • FAILED_LOGIN_ATTEMPTS:一旦某用户尝试登录数据库的次数达到该值时,该用户的帐户就被锁定,只能由DBA解锁。
  • PASSWORD_LIFE_TIME:设定口令的有效时间(天数),一旦超过,必须重新设口令。缺省为UNLIMITED。
  • PASSWORD_REUSE_TIME:许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令,缺省为180天。
  • PASSWORD_REUSE_MAX:重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。
  • PASSWORD_LOCK_TIME:设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。
  • PASSWORD_GRACE_TIME:在口令失效前,给予的重新设置该口令的宽限天数。当口令失效之后,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,那么口令将失效。该参数默认为7天。
  • PASSWORD_VERITY_FUNCTION:调用一个PL/SQL函数来验证口令。Oracle已提供该应用的脚本,为$ORACLE_HOME/rdbms/admin/utlpwdmg.sql。用户也可以制定自己的验证脚本。该参数的值设定就是函数的名称,缺省为NULL。

三、 用户状态

SYS@lhrdb> SELECT * FROM USER_ASTATUS_MAP;STATUS# STATUS
---------- --------------------------------0 OPEN1 EXPIRED2 EXPIRED(GRACE)4 LOCKED(TIMED)8 LOCKED5 EXPIRED & LOCKED(TIMED)6 EXPIRED(GRACE) & LOCKED(TIMED)9 EXPIRED & LOCKED10 EXPIRED(GRACE) & LOCKED

以上九种可以分为两大类:前五种是基本状态,后四种是组合状态。

每种状态的解释如表所示:

状态序号

状态

解释

处理办法

0

OPEN

OPEN表示用户处于正常状态

1

EXPIRED

密码是否过期是通过修改PROFILE中的PASSWORD_LIFE_TIME实现的,表示该帐户被设置为口令到期,要求用户在下次登录的时候修改口令(系统会在该账户被设置为EXPIRED后的第一次登陆是提示修改密码)。可以通过SQL语句(ALTER USER LHRSYS PASSWORD EXPIRE;)来显式地让用户密码过期

修改密码:SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME ='LHRSYS';ALTER USER SCOTT IDENTIFIED BY VALUES 'F894844C34402B67';

2

EXPIRED(GRACE)

当设置了GRACE以后(第一次成功登录后到口令到期后有多少天时间可改变口令。在这段时间内,帐户被提醒修改口令并可以正常登陆,ACCOUNT_STATUS显示为EXPIRED(GRACE)

修改密码:SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME ='LHRSYS';ALTER USER SCOTT IDENTIFIED BY VALUES 'F894844C34402B67';

4

LOCKED(TIMED)

表示失败的登录次数超过了FAILED_LOGIN_ATTEMPTS的值,被系统自动锁定。需要注意的是,从Oracle 10g开始,默认的DEFAULT值是10次,这个限制是由PROFILE中的FAILED_LOGIN_ATTEMPTS控制的,该信息可以通过DBA_PROFILES视图查询

解锁用户:ALTER USER LHRSYS ACCOUNT UNLOCK;

8

LOCKED

DBA显式地通过SQL语句对用户进行锁定(ALTER USER LHRSYS ACCOUNT LOCK;)

ALTER USER LHRSYS ACCOUNT UNLOCK;

5

EXPIRED & LOCKED(TIMED)

表示用户密码过期后,失败登录次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制

将用户UNLOCK并修改密码:ALTER USER LHRSYS ACCOUNT UNLOCK;ALTER USER LHRSYS IDENTIFIED BY LHR;

6

EXPIRED(GRACE) & LOCKED(TIMED)

表示用户在密码过期后的有效期内,失败登录次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制

将用户UNLOCK并修改密码:ALTER USER LHRSYS ACCOUNT UNLOCK;ALTER USER LHRSYS IDENTIFIED BY LHR;

9

EXPIRED & LOCKED

EXPIRED & LOCKED状态表示用户密码过期且同时处于锁定状态

将用户UNLOCK并修改密码:ALTER USER LHRSYS ACCOUNT UNLOCK;ALTER USER LHRSYS IDENTIFIED BY LHR;

10

EXPIRED(GRACE) & LOCKED

表示用户在密码过期后的有效期内被DBA手工锁定

将用户UNLOCK并修改密码:ALTER USER LHRSYS ACCOUNT UNLOCK;ALTER USER LHRSYS IDENTIFIED BY LHR;

(注:补充一个部分用户状态转换图)

三、 不知道原密码时如何重置密码

在Oracle中,如果用户的状态变成过期状态(EXPIRED、EXPIRED(GRACE)),DBA必须要更改用户的密码账户才能重新使用。

有些时候,因为各种原因并不知道原密码的明文是什么,这时候可以有如下2种办法来更新密码。

1. 用原密码的密文更改密码

在Oracle 10g中,DBA_USERS视图的PASSWORD字段提供了密码的密文形式,而在Oracle 11g中,该字段被弃用了,内容为空,但是在基表USER$中的PASSWORD字段依然有记录密文形式,所以可以通过如下的形式来获取密码的密文形式:

SELECT D.USERNAME,D.ACCOUNT_STATUS,D.LOCK_DATE,D.EXPIRY_DATE,D.PROFILE,NVL(D.PASSWORD,(SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME = D.USERNAME)) PASSWORDFROM DBA_USERS DWHERE D.USERNAME = 'LHRSYS';

另外,可以通过DBMS_METADATA.GET_DDL包或者expdp、exp命令来获取创建用户的语句从而获取密码的密文形式。

SYS@lhrdb> set long 9999
SYS@lhrdb> SELECT DBMS_METADATA.GET_DDL('USER', 'LHRSYS') DDL_SQL FROM DUAL;
DDL_SQL
--------------------------------------------------------------------------------CREATE USER "LHRSYS" IDENTIFIED BY VALUES 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC'DEFAULT TABLESPACE "USERS"TEMPORARY TABLESPACE "TEMP"

获取密码的密文后就可以用如下的命令来修改了,注意命令中多了一个VALUES关键字:

SYS@lhrdb> alter user LHRSYS identified by values 'F809740420A44EFC';
User altered.SYS@lhrdb> CONN  LHRSYS/lhr@192.168.59.129/lhrdb
Connected.LHRSYS@192.168.59.129/lhrdb> conn / as sysdba
Connected.SYS@lhrdb> alter user LHRSYS identified by values 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC';
User altered.SYS@lhrdb> CONN  LHRSYS/lhr@192.168.59.129/lhrdb
Connected.

所以,即使不知道用户的原密码是什么,也可以用它的密文来更改密码。这样既保持了密码不改变,又可以把EXPIRED的状态更改掉。

在MOS The Impact of PASSWORD_LIFE_TIME Database Profile Parameter Default to 180 Days on Network Charging and Control (文档 ID 1543668.1)中搜到了如下的命令也可以直接获取密码:

SELECT SQLTEXTFROM (SELECT NAME,'ALTER USER ' || NAME || ' IDENTIFIED BY VALUES ''' ||PASSWORD || ''';' SQLTEXTFROM USER$WHERE SPARE4 IS NULLAND PASSWORD IS NOT NULLUNIONSELECT NAME,'ALTER USER ' || NAME || ' IDENTIFIED BY VALUES ''' || SPARE4 || ';' ||PASSWORD || ''';' SQLTEXTFROM USER$WHERE SPARE4 IS NOT NULLAND PASSWORD IS NOT NULL)WHERE NAME = 'LHRSYS';

2. 直接更新USER$基表

不管用户的状态是什么,通过更新USER$表可以让用户处于OPEN状态(一般不用)

SYS@lhrdb> SELECT USERNAME, ACCOUNT_STATUS,EXPIRY_DATE,LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'LHRSYS';USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE
------------------------------ -------------------------------- ------------------- -------------------
LHRSYS                         EXPIRED                          2016-12-02 10:40:09SYS@lhrdb> UPDATE USER$ SET ASTATUS=0 WHERE NAME='LHRSYS';
1 row updated.SYS@lhrdb> commit;<<<<<<<<<------及时提交
Commit complete.SYS@lhrdb> SELECT USERNAME, ACCOUNT_STATUS,EXPIRY_DATE,LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'LHRSYS';USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE
------------------------------ -------------------------------- ------------------- -------------------
LHRSYS                         OPEN

原文:【DB笔试面试543】Oracle用户的状态有几种?分别表示什么含义? - 云+社区 - 腾讯云

Oracle用户的状态有几种?分别表示什么含义?相关推荐

  1. mysql和oracle用户管理_五种Oracle用户的授权与管理

    创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用 创建和删除用户是Oracle用户管理中的常见操作,但这其中隐 ...

  2. 如何更改ORACLE 用户的 expired状态

    oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢? 首先,  如果是locked状态还好办, DBA直接执行alter user scott acc ...

  3. 如何让oracle用户不过期,Oracle用户密码设为不过期的两种方法

    1.在sql Plus下,以DBA身份登陆 用户名/密码@服务器SID as sysdba 方法一:(注意必须用双引号把后面的引上) C:/Documents and Settings/ssy> ...

  4. 查找oracle11g的端口,oracle11g rac 非缺省端口在Oracle用户下无法查看状态

    今天在Oracle11gr2 rac 中修改了端口号,将1521修改为11521,修改完成后访问正常, 但发现在oracle用户下通过命令lsnrctl stat无法查看了 [oracle@rac01 ...

  5. oracle用户登录的3种认证方式

    url:http://www.cnblogs.com/ivictor/p/4213823.html Oracle对于普通账户和超级管理员(指sysdba和sysoper)的认证机制不一样,前者是通过数 ...

  6. 什么是oracle权限吗,Oracle用户权限的2种分类以及用途

    权限是用户对一项功能的执行权力.在Oracle中,根据系统管理方式不同,将权限分为系统权限与实体权限两类.系统权限是指是否被授权用户可以连 接到数据库上,在数据库中可以进行哪些系统操作.而实体权限是指 ...

  7. Oracle用户管理学习总结

    Oracle 用户管理 一.用户的概念 用户,即user,通俗的讲就是访问oracle数据库的"人".在oracle中,可以对用户的各种安全参数进行控制,以维护数据库的安全性,这些 ...

  8. oracle几个状态,oracle启动的四个状态

    1:oracle启动文件的优先顺序: 1:spfileSID.ora 2:Default SPFILE -->spfile.ora 3: initSID.ora 4: DEFAULT PFILE ...

  9. php oracle 锁表,ORACLE 用户锁定问题

    在开发环境下,由于直接修改了数据库用户的密码,之后一直不能连接,及时执行alter user username account unlock 还是提示用户锁定.刚开始只是怀疑是数据库的问题,就一直在数 ...

最新文章

  1. Kotlin的几个面试题
  2. TensorFlow固化模型+打包程序+web API
  3. LIVE 预告 | CVPR 2021 预讲 · 迁移学习前沿与进展
  4. 比较MongoDB在公有云上的性能:AWS、Azure和Digital Ocean
  5. Android监控wifi连接状态
  6. 天猫总架构师何崚:好的技术团队不是“需求翻译机”或“架构优化机”
  7. 以下哪个选项不是单例模式的优点_深度解密Python单例模式
  8. 使用RNN和TensorFlow创建自己的Harry Potter短故事
  9. LeetCode 2063. 所有子字符串中的元音(数学)
  10. Python学习笔记015——汉字编码
  11. Codeforces Round #383 (Div. 1): D. Arpa’s letter-marked tree…(dsu on tree+状压)
  12. Spring、SpringMVC和Springboot的区别
  13. Linux操作系统中GDB工具常见用法(一)
  14. MongoDB 数据库备份 与 恢复
  15. 嵌入式Linux入门:概述
  16. CreateIoCompletionPort函数和完成端口
  17. altair edem2021仿真模拟软件
  18. 89c51c语言程序,AT89C51单片机流水灯c语言程序及详解
  19. 使用多线程爬取笔趣阁
  20. 多张图片怎么同时修改dpi?教你一键批量修改图片dpi

热门文章

  1. 小白一键重装系统可以装服务器,离线一键重装系统
  2. .NET MVC微信网页登录授权(有效)
  3. 上海php平均工资2020,上海2020年各类平均工资一览,看看你在哪一档
  4. Java常见数据类型举例及总结
  5. 业绩下滑、股价大跌,芯片厂商如何越过寒冬?
  6. win10夜间模式无效替代解决方案
  7. 手机网站中 拨打电话代码
  8. 【小工具】网页自动刷新
  9. steam一直显示更新登陆不上服务器失败,steam上WARFRAME一直登不上去,随后显示更新失败, 此更新将在短期内重启,之前玩都还好好的...
  10. 数据结构课后答案 c语言版