限制不能使用最近三次的历史密码
2012-01-30 15:00
856 查看
开发的软件中是允许用户可以更自己的密码,现在客户有这样一个要求,是当用户更新密码时,要限制用户不能重新使用最近三次的历史密码。
实现客户的要求,唯有在数据库,创建一个密码更新Log表,然后再为Member表写一个触发器,每当用户更新密码时,去检索这个Log表,看看这次更新的密码是否存在Log表中,如果存在,提示用户,返之继续更新动作,然后把更新的信息插入Log表中,最后是删除Log记录,只保留此用户最近三次记录。
相关代码,可以参考:
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
实现客户的要求,唯有在数据库,创建一个密码更新Log表,然后再为Member表写一个触发器,每当用户更新密码时,去检索这个Log表,看看这次更新的密码是否存在Log表中,如果存在,提示用户,返之继续更新动作,然后把更新的信息插入Log表中,最后是删除Log记录,只保留此用户最近三次记录。
相关代码,可以参考:
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
相关文章推荐
- 限制root账户不能使用密码只能使用密钥远程登陆或直接不允许远程登录
- WIN7系统不能看到vs2010最近使用项目--解决
- DataSet测试及SqlHelper封装的测试,使用SqlHelper和DataSet后再做登录三次不能登录的功能
- 好久不做开发了,最近使用vs2008遇到了不能添加多个项目的问题,在此标记一下
- root账户不能使用密码只能使用密钥远程登陆
- 十类千万不能使用的密码
- 破解火车头采集器不能使用随机代理IP的限制
- 更改系统密码后sqlserver不能使用
- jquery使用Cookie和JSON记录用户最近浏览历史
- 如何使用H5判断登录页面手机号码长度是否正确和账号密码不能为空,从而减少对服务器的请求(注册也一样)
- 现在不能使用foxmail同步qq记事本功能,可能是对字数的大小有限制
- vmware下安装ubuntu键盘不能使用 root默认密码
- 使用“最近通知工具”保持桌面通知历史
- linux 修改密码时不能重复前n次使用过的
- jQuery 密码验证 字母加数字或符号的组合密码,不能单独使用数字、字母或字符
- Hibernate 限制查询数目,解决Limit在hql不能使用问题
- 配置:限制帐号使用su与无需密码su
- root账户不能使用密码只能使用密钥远程登陆
- mac的终端下面使用ssh user@localhost输入密码 不能正常登录
- 使用Cookie和JSON记录用户最近浏览历史