密码策略限制最大与最小长度

需要为程序加一些功能,如下表,这些设置可让管理员根据自己实际情况设置,缺省值为0不作任限制。

 

由于不是全新开发,而是在现在有程序补充功能,Insus.NET不想在程序作过多更改,只好修改存储过程来实现它们。现下面把实现上图highlight的选项功能分享出来。

保持密码原有记录值,只要管理员设置了密码策略之后,用户更改自己的密码时,就会应用到了新密码策略。

首先写一个获取参数值的自定义函数:

ExpandedBlockStart.gif udf_GetPasswordParameterValue
SET ANSI_NULLS  ON
GO

SET QUOTED_IDENTIFIER  ON
GO

--  =============================================
--
 Author:        Insus.NET
--
 Create date: 2012-02-05
--
 Description:    Get Password Parameter Value
--
 =============================================
CREATE  FUNCTION  [ dbo ]. [ udf_GetPasswordParameterValue ] 
(
     @PasswordParameterId  TINYINT
)
RETURNS  TINYINT
AS
BEGIN
     DECLARE  @ReturnValue  TINYINT
     SELECT  @ReturnValue  =  [ ParameterValue ]  FROM  [ dbo ]. [ PasswordParameter ]  WHERE  [ PasswordParameterId ]  =  @PasswordParameterId
     Return  @ReturnValue
END

GO

 

接下来,Insus.NET要修改有更改密码的的存储过程:

ExpandedBlockStart.gif usp_Users_UpdatePassword
SET ANSI_NULLS  ON
GO
SET QUOTED_IDENTIFIER  ON
GO
--  =============================================
--
 Author:        Insus.NET
--
 Create date: 2008-12-26
--
 Update date: 2012-06-05 23:11:19
--
 Description:    Update User Password
--
 =============================================

ALTER  PROCEDURE  [ dbo ]. [ usp_Users_UpdatePassword ]
(
     @ID  INT,
     @OldPassword  nvarchar( 30),
     @Password  nvarchar( 30)
)
AS    

-- 判断用户输入的密码是否正确
IF  NOT  EXISTS( SELECT  TOP  1  *  FROM  [ Users ]  WHERE  [ Password ]  =  @OldPassword  AND  [ UsersId ]  =  @ID)
BEGIN
     RAISERROR(N ' 旧密码输入不正确,无法更新! ', 16, 1)
     RETURN
END

-- 下面两个变量,是从密码策略表获取最小长度与最大长度值
DECLARE  @PasswordLengthMin  TINYINT  =  [ dbo ]. [ udf_GetPasswordParameterValue ]( 3)
DECLARE  @PasswordLengthMax  TINYINT  =  [ dbo ]. [ udf_GetPasswordParameterValue ]( 4)

-- 如果大于0,说明设置了密码最小长度策略
IF  @PasswordLengthMin  >  0  AND  LEN( @Password<  @PasswordLengthMin
BEGIN
     RAISERROR(N ' 密码最小长度必须大于或等于%d字符。 ', 16, 1, @PasswordLengthMin)
     RETURN
END

-- 如果大于0,说明设置了密码最大长度策略
IF  @PasswordLengthMax  >  0  AND  LEN( @Password>  @PasswordLengthMax
BEGIN
     RAISERROR(N ' 密码最大长度必须小于或等于%d字符。 ', 16, 1, @PasswordLengthMax)
     RETURN
END

-- 更新密码
UPDATE  [ Users ]  SET  [ Password ]  =  @Password  WHERE  [ UsersId ]  =  @ID

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值