看到群里有小伙伴问这个问题,自己也很好奇就查了一下相关的一些知识,如果有不对的地方看到的大佬一定指出!
1.基表查询密码修改记录
通过查询sys.user跟sys.user_history基表,能查询到某账户的历史修改记录。但是根据自己查询及向同事确认,在不考虑审计功能的情况下最多就能查询到修改的时间及密码文件的加密串。
代码语言:javascript复制--语句1
SELECT name, password_date, password
FROM sys.user$, sys.user_history$
WHERE user$.user# = user_history$.user#;
单独查询sys.user$只能查询到最近一次密码修改的记录
代码语言:javascript复制--语句2
select name,TYPE#,PTIME from USER$ where name ='XK';
2.sys.user$表的一些列说明
这个表保存了关于users和roles的一些信息
一些列的说明:
- NAME – user或者role的名称
- TYPE# – 0代表role,1代表user
- CTIME – 创建时间
- PTIME – 密码最后一次修改的时间
- EXPTIME – 密码最后过期的日期
- LTIME – 资源最后被锁定的日期
- LCOUNT – 登录失败的次数
--查询示例
SELECT NAME, type#, ctime, ptime, exptime, ltime, lcount
FROM sys.user$
WHERE NAME IN ('SYS', 'SYSTEM', 'PUBLIC', 'DBA', 'SCOTT')
ORDER BY NAME;
3.sys.user_history$基表
首先注意,一开始执行语句1(文章开头的)的时候并没有返回值,单独查询了一下sys.user_history$表的时候是空的。确认只有PASSWORD_REUSE_TIME设置为非UNLIMITED的时候才会记录。
代码语言:javascript复制--查询PASSWORD_REUSE_TIME设置
select profile,limit
from dba_profiles
where profile='DEFAULT' and resource_name='PASSWORD_REUSE_TIME';
--修改PASSWORD_REUSE_TIME设置
alter profile DEFAULT limit PASSWORD_REUSE_TIME 360;
user.user# = user_history.user#
4.总结
- 假设在上面参数都设置好的情况下,是能帮助确认到密码的历史修改记录,但是仅仅是修改时间及原密码的加密串;
- 启用审计能记录更多的信息,但是起码目前我经手的库大部分是不开的;
- 有些独立的数据库审计软件是能记录;
- 审计这块还是得系统学习下;
- SYS.AUD$