在Oracle中,如何查询密码输入错误的登陆用户?
Tags: DBA_PROFILESORA-28000Oracle密码错误解锁帐户
DBA_PROFILES
Oracle用户的状态是由密码来决定的,而Oracle中的密码是由PROFILE来配置的。PROFILE是口令限制、资源限制的命令集合。当建立数据库时,Oracle会自动建立名称为DEFAULT的PROFILE。当创建用户而没有指定PROFILE选项时,Oracle就会将DEFAULT分配给用户。
通过如下的命令可以查出与密码相关的PROFILE的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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。
本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!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$的列LCOUNT加1。只要成功登录后,LCOUNT的值就会置0。另外,审计表(SYS.AUD$或DBA_AUDIT_TRAIL)也记录了登陆失败的信息,其RETURNCODE列的值为1017,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | -- 密码输入错误次数 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如下:
1 | alter user lhr account unlock; |
另外可以修改FAILED_LOGIN_ATTEMPTS的值:
1 2 3 4 5 6 7 8 9 10 | -- 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; |