开发的软件中是允许用户可以更自己的密码,现在客户有这样一个要求,是当用户更新密码时,要限制用户不能重新使用最近三次的历史密码。

实现客户的要求,唯有在数据库,创建一个密码更新Log表,然后再为Member表写一个触发器,每当用户更新密码时,去检索这个Log表,看看这次更新的密码是否存在Log表中,如果存在,提示用户,返之继续更新动作,然后把更新的信息插入Log表中,最后是删除Log记录,只保留此用户最近三次记录。

相关代码,可以参考:

MemberPasswordChangeLog

CREATE TABLE MemberPasswordChangeLog
(
    Log_Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
    MemberId INT NOT NULL,
    PWD_Value NVARCHAR(100) NOT NULL,
    Log_Date DATETIME DEFAULT(GETDATE()) NOT NULL
)

GO

触发器:

tri_Member_Update

CREATE TRIGGER [dbo].[tri_Member_Update] 
ON [dbo].[Member]
FOR UPDATE
AS
BEGIN
    DECLARE @MemberId INT,@N_Value NVARCHAR(100),@O_Value NVARCHAR(100)
    SELECT @MemberId = [MemberId],@O_Value = [Password] FROM DELETED
    SELECT @O_Value = [Password] FROM INSERTED
    IF @N_Value <> @O_Value  --比较新旧两个值,如果不一样,会员更新密码
    BEGIN
        --去检查MemberPasswordChangeLog表,看看最近用户更新密码的情况
        IF EXISTS(SELECT TOP 1 1 FROM [dbo].[MemberPasswordChangeLog] WHERE [MemberId] = @MemberId AND [PWD_Value] = @N_Value)
        BEGIN
            RAISERROR(N'不能使用最近三次的历史密码。',16,1)
            RETURN 
        END
        
        --把更新数据插入Log表中
        INSERT INTO [dbo].[MemberPasswordChangeLog] ([MemberId],[PWD_Value]) VALUES (@MemberId,@N_Value)
        
        --保留最近更新三笔记录,删除额外记录
        DELETE FROM [dbo].[MemberPasswordChangeLog] WHERE [MemberId] = @MemberId AND [Log_Id] NOT IN (
            SELECT TOP(3) [Log_Id] FROM [dbo].[MemberPasswordChangeLog] WHERE [MemberId] = @MemberId ORDER BY [Log_Date] DESC
        )
    END    
END

转载于:https://www.cnblogs.com/insus/archive/2012/01/30/2332013.html

限制不能使用最近三次的历史密码相关推荐

  1. 游戏光枪的三十年历史

    游戏光枪的三十年历史 一句话看专题:今年是FC光枪问世的三十周年纪念,让我们来说说这款周边的种种故事. 光枪和游戏的天作之合 作为游戏史上最著名的外设之一,光枪(Light gun)的历史实际上远比电 ...

  2. Spring Security自定义登录验证,验证码,动态管理uri访问权限,Thymeleaf,限制密码强度、过期、错误密码锁定超时自动解锁、禁用历史密码、新密码和现密码差异要求编辑距离

    在本教程中,我将指导您如何编写代码,以使用具有基于表单的身份验证的Spring安全API来保护Spring Boot应用程序中的网页.用户详细信息存储在MySQL数据库中,并使用春季JDBC连接到数据 ...

  3. Spring Security登录验证,验证码,动态管理uri访问权限,Thymeleaf,限制密码强度、过期、错误密码锁定超时自动解锁、禁用历史密码、新密码和现密码差异要求编辑距离

    在本教程中,我将指导您如何编写代码,以使用具有基于表单的身份验证的Spring安全API来保护Spring Boot应用程序中的网页.用户详细信息存储在MySQL数据库中,并使用春季JDBC连接到数据 ...

  4. 读取mstsc历史密码

    读取mstsc历史密码 通过注册表查看历史记录 通过本地Credentials 读取记录 使用mimikatz读取密码(需要保存过凭证的才可以) 日志清除 参考文章 通过注册表查看历史记录 reg q ...

  5. linux 删除历史密码

    文章目录 背景 解决方法 背景 devcloud 上的云开发机会定时要求更新密码,要求不能跟旧密码相似,这就导致我修改后经常忘记密码,记录下解决方法 解决方法 登陆 root 用户(如果记得普通用户的 ...

  6. Spring Security 定制UserDetailsService,动态uri权限,Thymeleaf,限制密码强度、过期、错误密码锁定超时自动解锁、禁用历史密码、新密码和现密码差异要求编辑距离

    在本教程中,我将指导您如何编写代码,以使用具有基于表单的身份验证的Spring安全API来保护Spring Boot应用程序中的网页.用户详细信息存储在MySQL数据库中,并使用春季JDBC连接到数据 ...

  7. Android数据库加解密逆向分析(三)——微信数据库密码破解

    接着上一篇文章,在上一篇文章中我们通过对Line数据库加密的逆向分析,了解到了对要写入到数据库中的数据加密,读取时再将读取出的数据解密这种Android上的数据库加密方式.这篇文章来通过介绍对微信数据 ...

  8. 【安全与风险】概率论与历史密码

    概率论与历史密码 概述 概率 :复习 概率 事件 概率的基本性质 互斥事件 随机变量 独立事件 历史密码 加密和解密 概述 概率论回顾 更新密码学和信息安全的数学基础 历史密码 回到安全和密码学的起源 ...

  9. sqlserver 分组合并列_哪个“三人组”是历史最强组合?数据显示最均衡组合令人意外...

    谁是历史上最好的三人组?发现自从戴维斯加盟湖人以后关于"历史最佳X人组"的话题讨论就成为了各路媒体吸引流量的主要来源.<雅虎体育>自然也不甘落后,今天他们就以此为题发布 ...

最新文章

  1. 基于改进的点对特征的6D位姿估计
  2. iphone同步助手_iPhone怎么批量删除联系人?
  3. 8Manage项目管理:嵌入人工智能的项目管理平台
  4. 【两种解法】1004 Counting Leaves (30 分)_27行代码AC
  5. s2 理论 第二套题
  6. 让apache支持ssl
  7. 一个hitbernate配置文件,带几个表(注意mapping);如果连接字符串没有设置utf-8,向insert mysql 会产生乱码(utf8 或 utf-8)...
  8. Linux学习(3)Linux文件的基本属性、文件内容查看
  9. bex5执行oracle语句,BeX5
  10. 刷BOIS的要点方法
  11. TweenMax学习笔记整理
  12. 【第17周复盘】拿到红本本喽!
  13. eos区块链 java客户端_分享一个网友第一次开发EOS区块链总结的经验
  14. uni-app学习(九):computed
  15. 跑步健身戴什么耳机合适?五款高性价比运动耳机推荐
  16. 学习unity2d的计划安排
  17. Linux SPI 子系统(x86平台)
  18. lvs集群实现lvs-dr模型和lvs-nat模型
  19. Linux热键详解:Tab键,Ctrl+c、Ctrl+d
  20. mac安装mysql方法

热门文章

  1. controlleradvice 参数_Spring MVC之@ControllerAdvice详解
  2. ant centos环境下 编译没有将配置文件加载_你可能忽略的macOS下brew安装nginx细节解读,干货
  3. exfat linux 驱动_(实例)Linux 内核添加exfat驱动
  4. Python入门--基本输入输出
  5. Qt学习笔记-----Graphics_View_Framework
  6. postmethod 设置request body utf-8_Cypress系列(62) request() 命令详解
  7. on java8学习笔记2022.2.19-2022.2.20
  8. 两数之和—leetcode2
  9. linux usb视频开发板,ARM开发板上USB 摄像头图像采集实现
  10. count相加 sqlserver_mssql sqlserver sum(1)、sum(2)、count(1)、count(8)、count(*)、统计函数应用区别简介...