博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
密码策略设置密码过期天数
阅读量:5082 次
发布时间:2019-06-13

本文共 2172 字,大约阅读时间需要 7 分钟。

 

需要为程序中添加此功能。系统管理可以管理设置此参数,Default值为0,更新大于0,说明启用功能。其实它和用户管理表中的另外一个选项“密码永不过期”相辅相成之后,才能成形一个完整的功能。

 

 

管理员更新“密码过期天数”选项值,如果由大于0的数值更新为0(初始值),数据库触发器会检查用户管理表中的“密码永不过期”选项或“密码过期日期”是否有值,如果条件为真,更新动作终止。

ExpandedBlockStart.gif
tri_PasswordParameter_Update
SET ANSI_NULLS 
ON
GO
SET QUOTED_IDENTIFIER 
ON
GO
ALTER 
TRIGGER 
[
dbo
].
[
tri_PasswordParameter_Update
] 
ON 
[
dbo
].
[
PasswordParameter
]
FOR 
UPDATE
AS
BEGIN
    
DECLARE 
@PasswordParameterId 
TINYINT,
@ParameterValue 
TINYINT
    
    
SELECT 
@PasswordParameterId 
= 
[
PasswordParameterId
] 
FROM DELETED
    
SELECT 
@ParameterValue 
= 
[
ParameterValue
] 
FROM INSERTED
    
    
IF (
@PasswordParameterId 
= 
5 
AND 
@ParameterValue 
= 
0 
AND 
EXISTS(
SELECT 
TOP 
1 
1 
FROM 
[
dbo
].
[
Users
] 
WHERE 
[
PasswordNeverExpires
] 
= 
1 
OR 
[
PasswordExpirationDate
] 
IS 
NOT 
NULL))
    
BEGIN
        
RAISERROR(N
'
设置已经生效应用,不能初始化为0。
',
16,
1)
        
ROLLBACK 
TRANSACTION
    
END
END

 

用户管理表的“密码过期日期”,是只读字段,不能人为手动更新,方法可以参考:

管理员更新“密码永不过期”选项,如果Enable的话,系统首选去检查密码参数设置的“密码过期天数”是否设值启用。如果没有启用,提示管理员首先设置。如果已经设置,系统会获取此值,并更新“密码过期日期”。如果取消,系统也会更新“密码过期日期”字段,初始化为NULL空。

可以参考下面的触发器:

ExpandedBlockStart.gif
tri_Users_Update
SET ANSI_NULLS 
ON
GO
SET QUOTED_IDENTIFIER 
ON
GO
ALTER 
TRIGGER 
[
dbo
].
[
tri_Users_Update
] 
ON 
[
dbo
].
[
Users
]
FOR 
UPDATE
AS
DECLARE 
@PasswordExpiration 
TINYINT 
= 
[
dbo
].
[
udf_GetPasswordParameterValue
](
5)
DECLARE 
@PasswordNeverExpires_N 
BIT 
= (
SELECT 
[
PasswordNeverExpires
] 
FROM INSERTED)
DECLARE 
@PasswordNeverExpires_O 
BIT 
= (
SELECT 
[
PasswordNeverExpires
] 
FROM DELETED)
DECLARE 
@UsersId 
INT 
= (
SELECT 
[
UsersId
] 
FROM DELETED)
IF 
@PasswordNeverExpires_N 
= 
1 
AND 
@PasswordExpiration 
= 
0
BEGIN
    
RAISERROR(N
'
更新密码永不过期选项,先设置密码参数中的密码过期天数,更新操作终止。
',
16,
1)
    
ROLLBACK 
TRANSACTION
END
ELSE
BEGIN
    
IF  
@PasswordNeverExpires_O 
= 
0 
AND 
@PasswordNeverExpires_N 
= 
1 
        
UPDATE 
[
dbo
].
[
Users
] 
SET 
[
PasswordExpirationDate
] 
= 
DATEADD(
day,
@PasswordExpiration,
CURRENT_TIMESTAMP
WHERE 
[
UsersId
] 
= 
@UsersId
    
    
IF 
@PasswordNeverExpires_O 
= 
1 
AND 
@PasswordNeverExpires_N 
= 
0 
        
UPDATE 
[
dbo
].
[
Users
] 
SET 
[
PasswordExpirationDate
]  
= 
NULL 
WHERE 
[
UsersId
] 
= 
@UsersId
        
    
IF 
UPDATE(
[
PasswordExpirationDate
])
    
BEGIN
        
RAISERROR(N
'
禁止人为更改密码过期时间,更改操作终止。
',
16,
1)
        
ROLLBACK 
TRANSACTION
    
END
END

 

转载于:https://www.cnblogs.com/insus/archive/2012/02/09/2344163.html

你可能感兴趣的文章
2015 Multi-University Training Contest 3
查看>>
使用Gitblit 在windows 上部署你的Git Server
查看>>
217. Contains Duplicate
查看>>
vue2.0 关于Vue实例的生命周期
查看>>
jenkins 更换主数据目录
查看>>
Silverlight中恼人的g.i.cs错误
查看>>
SQLite 数据库增删改查
查看>>
<s:iterator>的status
查看>>
C++入门--1.0输入输出
查看>>
让搭建在Github Pages上的Hexo博客可以被Google搜索到
查看>>
Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段...
查看>>
在WPF控件上添加Windows窗口式调整大小行为
查看>>
背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
查看>>
教育类APP开发现新增长,多款APP该如何突围?
查看>>
打开3389
查看>>
React学习记录
查看>>
nginx常见内部参数,错误总结
查看>>
对象与类
查看>>
《奸的好人2》财色战场----笔记
查看>>
BZOJ 1834网络扩容题解
查看>>