在Oracle中,如何查询密码输入错误的登陆用户
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 或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;
参考
- 点赞
- 收藏
- 关注作者
评论(0)