在Oracle中,如何查询密码输入错误的登陆用户

举报
小麦苗DB宝 发表于 2022/02/16 14:51:17 2022/02/16
【摘要】 DBA_PROFILESOracle用户的状态是由密码来决定的,而Oracle中的密码是由PROFILE来配置的。PROFILE是口令限制、资源限制的命令集合。当建立数据库时,Oracle会自动建立名称为DEFAULT的PROFILE。当创建用户而没有指定PROFILE选项时,Oracle就会将DEFAULT分配给用户。通过如下的命令可以查出与密码相关的PROFILE的值:SYS@LHR1...

DBA_PROFILES

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

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

SYS@LHR11G>  SELECT *
  2     FROM DBA_PROFILES D
  3    WHERE D.PROFILE = 'DEFAULT'
  4      AND (D.RESOURCE_NAME LIKE '%PASSWORD%' OR  D.RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS');

PROFILE                                                      RESOURCE_NAME                                                    RESOURCE_TYPE    LIMIT
------------------------------------------------------------ ---------------------------------------------------------------- ---------------- --------------------------------------------------------------------------------
DEFAULT                                                      FAILED_LOGIN_ATTEMPTS                                            PASSWORD         10
DEFAULT                                                      PASSWORD_LIFE_TIME                                               PASSWORD         180
DEFAULT                                                      PASSWORD_REUSE_TIME                                              PASSWORD         UNLIMITED
DEFAULT                                                      PASSWORD_REUSE_MAX                                               PASSWORD         UNLIMITED
DEFAULT                                                      PASSWORD_VERIFY_FUNCTION                                         PASSWORD         NULL
DEFAULT                                                      PASSWORD_LOCK_TIME                                               PASSWORD         1
DEFAULT                                                      PASSWORD_GRACE_TIME                                              PASSWORD         7

7 rows selected.

每个参数的含义如下所示:

  • FAILED_LOGIN_ATTEMPTS 设定登录到Oracle数据库时可以失败的次数。一旦某用户尝试登录数据库的次数达到该值时,该用户的帐户就被锁定,只能由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。但是,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称,缺省为NULL。

密码输入错误记录

问题、若用户LHRSYS登录失败,则从哪个视图可以获取登录失败的次数?

答案:若某个用户登录数据库失败,则基表USER 的列 L C O U N T 1 。只要成功登录后, L C O U N T 的值就会置 0 。另外,审计表( S Y S . A U D 的列LCOUNT加1。只要成功登录后,LCOUNT的值就会置0。另外,审计表(SYS.AUD 或DBA_AUDIT_TRAIL)也记录了登陆失败的信息,其RETURNCODE列的值为1017,如下所示:

-- 密码输入错误次数
select name,LCOUNT from sys.USER$  where name='LHR';

-- 密码输入错误详情
SELECT D.USERNAME,D.TIMESTAMP,D.ACTION_NAME,D.OS_USERNAME,D.TERMINAL
  FROM DBA_AUDIT_TRAIL D
 WHERE D.RETURNCODE = 1017
   AND D.USERNAME = 'LHR'
  ORDER BY D.TIMESTAMP DESC ;

-- 或:
SELECT *
  FROM (SELECT A.DBID,
               A.SESSIONID,
               A.PROCESS#,
               A.ENTRYID,
               A.USERID,
               (SELECT NA.LCOUNT FROM SYS.USER$ NA WHERE NA.NAME = A.USERID) LCOUNT,
               A.USERHOST,
               A.TERMINAL,
               A.ACTION#,
               A.RETURNCODE,
               A.COMMENT$TEXT,
               A.SPARE1,
               A.NTIMESTAMP# + 8 / 24 LOGIN_TIME
          FROM SYS.AUD$ A
         WHERE A.RETURNCODE = 1017
           AND A.NTIMESTAMP# + 8 / 24 >= SYSDATE - 7
         ORDER BY A.NTIMESTAMP# DESC)
 WHERE ROWNUM <= 100;

SELECT d.userhost,
       COUNT(*)
FROM   sys.aud$ d
WHERE  d.returncode = 1017
AND    d.userid = 'LHR' 
GROUP  BY d.userhost; 

ORA-28000: the account is locked

设定登录到Oracle数据库时可以失败的次数。一旦某用户尝试登录数据库的次数达到FAILED_LOGIN_ATTEMPTS时,该用户的帐户就被锁定,只能由DBA解锁。一般数据库默认是10次尝试失败后锁住用户。

解锁的SQL如下:

alter user lhr account unlock;

另外可以修改FAILED_LOGIN_ATTEMPTS的值:


-- 1、查看FAILED_LOGIN_ATTEMPTS的值
select * from dba_profiles d where D.RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS';

-- 2、修改为30次
alter profile default limit FAILED_LOGIN_ATTEMPTS 30;

-- 3、修改为无限次(为安全起见,不建议使用)
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;

参考

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

在Oracle中,若用户LHRSYS登录失败,则从哪个视图可以获取登录失败的次数?

在Oracle中,哪个参数控制密码的大小写敏感性?

在Oracle中,密码延迟验证是什么?如何屏蔽?

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。