如何将旧密码存储在数据库中?

时间:2016-01-11 11:06:51

标签: oracle jsp

我想存储以前的6个密码,以便每当用户想要更改密码时,首先使用旧密码进行验证并相应返回。

如何在不添加数据库中的任何新列的情况下存储旧密码。

如果可能的话,任何参考。

2 个答案:

答案 0 :(得分:2)

我认为您的问题的目标是验证密码是否未被重复使用。因此我建议:

使用字段IDTIMESTAMP以及PASSWORD等其他数据字段创建其他历史记录表。

create table USER_HIST (ID varchar2(20), TIMESTAMP date, PASSWORD varchar2(20));

USER表上创建更新触发器,并在密码更改时在USER_HIST中插入一个条目。用户只保留最后六个条目。

create or replace trigger "PASSWORD_CHANGE"
before update on USER_TB
for each row
begin
    if :new.password <> :old.password then

      delete USER_HIST h where h.ID = :old.ID and h.TIMESTAMP = 
        (select min(TIMESTAMP) from user_hist u where u.ID = :old.ID 
         having count(*) >= 6);

      insert into USER_HIST (ID, TIMESTAMP, PASSWORD) values
                            (:old.ID, sysdate, :old.PASSWORD);
    end if;
end;

在历史记录表中添加约束,以验证之前从未使用过密码。

alter table USER_HIST add constraint pwd_is_not_reused UNIQUE (ID, PASSWORD);

用户更改密码时捕获异常。

答案 1 :(得分:1)

您可以插入多行并获取最近的一行以获取当前密码。 对于验证,您可以使用旧记录检查密码历史记录,如下面的实现。

ID USER_NAME PASSWORD UPDATE_DT
1 用户1 密码1 2015年12月12日
2 用户1 密码2 13/12/2015
3 用户1 password3 14/12/2015

这对学校项目来说几乎没有用。但是,如果您计划生产级代码,那么我建议您重新考虑数据库方法。而且也不要存储纯文本密码。请改用salted hash