Oracle用户的状态有几种?分别表示什么含义?
一、 简介
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用户的状态有几种?分别表示什么含义?相关推荐
- mysql和oracle用户管理_五种Oracle用户的授权与管理
创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用 创建和删除用户是Oracle用户管理中的常见操作,但这其中隐 ...
- 如何更改ORACLE 用户的 expired状态
oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢? 首先, 如果是locked状态还好办, DBA直接执行alter user scott acc ...
- 如何让oracle用户不过期,Oracle用户密码设为不过期的两种方法
1.在sql Plus下,以DBA身份登陆 用户名/密码@服务器SID as sysdba 方法一:(注意必须用双引号把后面的引上) C:/Documents and Settings/ssy> ...
- 查找oracle11g的端口,oracle11g rac 非缺省端口在Oracle用户下无法查看状态
今天在Oracle11gr2 rac 中修改了端口号,将1521修改为11521,修改完成后访问正常, 但发现在oracle用户下通过命令lsnrctl stat无法查看了 [oracle@rac01 ...
- oracle用户登录的3种认证方式
url:http://www.cnblogs.com/ivictor/p/4213823.html Oracle对于普通账户和超级管理员(指sysdba和sysoper)的认证机制不一样,前者是通过数 ...
- 什么是oracle权限吗,Oracle用户权限的2种分类以及用途
权限是用户对一项功能的执行权力.在Oracle中,根据系统管理方式不同,将权限分为系统权限与实体权限两类.系统权限是指是否被授权用户可以连 接到数据库上,在数据库中可以进行哪些系统操作.而实体权限是指 ...
- Oracle用户管理学习总结
Oracle 用户管理 一.用户的概念 用户,即user,通俗的讲就是访问oracle数据库的"人".在oracle中,可以对用户的各种安全参数进行控制,以维护数据库的安全性,这些 ...
- oracle几个状态,oracle启动的四个状态
1:oracle启动文件的优先顺序: 1:spfileSID.ora 2:Default SPFILE -->spfile.ora 3: initSID.ora 4: DEFAULT PFILE ...
- php oracle 锁表,ORACLE 用户锁定问题
在开发环境下,由于直接修改了数据库用户的密码,之后一直不能连接,及时执行alter user username account unlock 还是提示用户锁定.刚开始只是怀疑是数据库的问题,就一直在数 ...
最新文章
- Kotlin的几个面试题
- TensorFlow固化模型+打包程序+web API
- LIVE 预告 | CVPR 2021 预讲 · 迁移学习前沿与进展
- 比较MongoDB在公有云上的性能:AWS、Azure和Digital Ocean
- Android监控wifi连接状态
- 天猫总架构师何崚:好的技术团队不是“需求翻译机”或“架构优化机”
- 以下哪个选项不是单例模式的优点_深度解密Python单例模式
- 使用RNN和TensorFlow创建自己的Harry Potter短故事
- LeetCode 2063. 所有子字符串中的元音(数学)
- Python学习笔记015——汉字编码
- Codeforces Round #383 (Div. 1): D. Arpa’s letter-marked tree…(dsu on tree+状压)
- Spring、SpringMVC和Springboot的区别
- Linux操作系统中GDB工具常见用法(一)
- MongoDB 数据库备份 与 恢复
- 嵌入式Linux入门:概述
- CreateIoCompletionPort函数和完成端口
- altair edem2021仿真模拟软件
- 89c51c语言程序,AT89C51单片机流水灯c语言程序及详解
- 使用多线程爬取笔趣阁
- 多张图片怎么同时修改dpi?教你一键批量修改图片dpi
热门文章
- 小白一键重装系统可以装服务器,离线一键重装系统
- .NET MVC微信网页登录授权(有效)
- 上海php平均工资2020,上海2020年各类平均工资一览,看看你在哪一档
- Java常见数据类型举例及总结
- 业绩下滑、股价大跌,芯片厂商如何越过寒冬?
- win10夜间模式无效替代解决方案
- 手机网站中 拨打电话代码
- 【小工具】网页自动刷新
- steam一直显示更新登陆不上服务器失败,steam上WARFRAME一直登不上去,随后显示更新失败, 此更新将在短期内重启,之前玩都还好好的...
- 数据结构课后答案 c语言版