zoukankan
html css js c++ java
aspnet_Membership_GetPassword
ALTER
PROCEDURE
dbo.aspnet_Membership_GetPassword
--
获取密码
@ApplicationName
NVARCHAR
(
256
),
@UserName
NVARCHAR
(
256
),
@MaxInvalidPasswordAttempts
INT
,
@PasswordAttemptWindow
INT
,
@TimeZoneAdjustment
INT
,
@PasswordAnswer
NVARCHAR
(
128
)
=
NULL
AS
BEGIN
DECLARE
@UserId
UNIQUEIDENTIFIER
DECLARE
@PasswordFormat
INT
DECLARE
@Password
NVARCHAR
(
128
)
DECLARE
@passAns
NVARCHAR
(
128
)
DECLARE
@IsLockedOut
BIT
DECLARE
@LastLockoutDate
DATETIME
DECLARE
@FailedPasswordAttemptCount
INT
DECLARE
@FailedPasswordAttemptWindowStart
DATETIME
DECLARE
@FailedPasswordAnswerAttemptCount
INT
DECLARE
@FailedPasswordAnswerAttemptWindowStart
DATETIME
/**/
/*
声明一大堆的变量
*/
DECLARE
@ErrorCode
INT
SET
@ErrorCode
=
0
DECLARE
@TranStarted
BIT
SET
@TranStarted
=
0
IF
(
@@TRANCOUNT
=
0
)
--
--若当前活动事务为0,开始事务
BEGIN
BEGIN
TRANSACTION
SET
@TranStarted
=
1
--
设置事务参数为1
END
ELSE
SET
@TranStarted
=
0
DECLARE
@DateTimeNowUTC
DATETIME
--
声明当前标准时间
EXEC
dbo.aspnet_GetUtcDate
@TimeZoneAdjustment
,
@DateTimeNowUTC
OUTPUT
/**/
/*
调用存储过程。第一个参数在存储过程中好象没用到,哪里用呢?-_-!
*/
SELECT
@UserId
=
u.UserId,
@Password
=
m.Password,
@passAns
=
m.PasswordAnswer,
@PasswordFormat
=
m.PasswordFormat,
@IsLockedOut
=
m.IsLockedOut,
@LastLockoutDate
=
m.LastLockoutDate,
@FailedPasswordAttemptCount
=
m.FailedPasswordAttemptCount,
@FailedPasswordAttemptWindowStart
=
m.FailedPasswordAttemptWindowStart,
@FailedPasswordAnswerAttemptCount
=
m.FailedPasswordAnswerAttemptCount,
@FailedPasswordAnswerAttemptWindowStart
=
m.FailedPasswordAnswerAttemptWindowStart
FROM
dbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.aspnet_Membership m
WITH
( UPDLOCK )
WHERE
LOWER
(
@ApplicationName
)
=
a.LoweredApplicationName
AND
u.ApplicationId
=
a.ApplicationId
AND
u.UserId
=
m.UserId
AND
LOWER
(
@UserName
)
=
u.LoweredUserName
/**/
/*
又是aspnet_Applications/aspnet_Users/aspnet_Membership三表连接查询,条件为
输入参数@UserName/@ApplicationName
*/
IF
(
@@rowcount
=
0
)
--
-返回受上一语句影响的行数,即无结果就回滚
BEGIN
SET
@ErrorCode
=
1
GOTO
Cleanup
END
IF
(
@IsLockedOut
=
1
)
--
是否锁住,如果是也回滚(锁定用户当然不让操作……)
BEGIN
SET
@ErrorCode
=
99
GOTO
Cleanup
END
IF
(
NOT
(
@PasswordAnswer
IS
NULL
) )
--
如果密码提示问题不为空(干嘛那样写?和前面的区别吗?)
BEGIN
IF
( (
@passAns
IS
NULL
)
OR
(
LOWER
(
@passAns
)
<>
LOWER
(
@PasswordAnswer
) ) )
/**/
/*
如果此用户的密码提示问题为空或者密码提示问题不为输入的密码提示问题
*/
BEGIN
IF
(
@DateTimeNowUTC
>
DATEADD
( minute,
@PasswordAttemptWindow
,
@FailedPasswordAnswerAttemptWindowStart
) )
/**/
/*
如果当前时间大于计算出来的时间,如下
*/
/**/
/*
就是当打开密码提示问题窗口失败的时间的分钟数上加上@PasswordAttemptWindow参数的值
*/
/**/
/*
参照DATEADD函数
*/
BEGIN
SET
@FailedPasswordAnswerAttemptWindowStart
=
@DateTimeNowUTC
--
密码失败尝试窗口打开时间
SET
@FailedPasswordAnswerAttemptCount
=
1
END
/**/
/*
这时间计算还真有点乱,-_-!!
*/
ELSE
BEGIN
SET
@FailedPasswordAnswerAttemptCount
=
@FailedPasswordAnswerAttemptCount
+
1
SET
@FailedPasswordAnswerAttemptWindowStart
=
@DateTimeNowUTC
END
BEGIN
IF
(
@FailedPasswordAnswerAttemptCount
>=
@MaxInvalidPasswordAttempts
)
BEGIN
SET
@IsLockedOut
=
1
SET
@LastLockoutDate
=
@DateTimeNowUTC
END
/**/
/*
如果尝试次数超过限制,则锁定用户,并设置最近锁定时间为当前时间
*/
END
SET
@ErrorCode
=
3
END
ELSE
BEGIN
IF
(
@FailedPasswordAnswerAttemptCount
>
0
)
/**/
/*
如果密码问题存在,但是尝试次数大于0
*/
BEGIN
SET
@FailedPasswordAnswerAttemptCount
=
0
SET
@FailedPasswordAnswerAttemptWindowStart
=
CONVERT
(
DATETIME
,
'
17540101
'
,
112
)
END
--
-好象是还原为初值了
END
UPDATE
dbo.aspnet_Membership
SET
IsLockedOut
=
@IsLockedOut
, LastLockoutDate
=
@LastLockoutDate
,
FailedPasswordAttemptCount
=
@FailedPasswordAttemptCount
,
FailedPasswordAttemptWindowStart
=
@FailedPasswordAttemptWindowStart
,
FailedPasswordAnswerAttemptCount
=
@FailedPasswordAnswerAttemptCount
,
FailedPasswordAnswerAttemptWindowStart
=
@FailedPasswordAnswerAttemptWindowStart
WHERE
@UserId
=
UserId
/**/
/*
更新数据表
*/
IF
(
@@ERROR
<>
0
)
BEGIN
SET
@ErrorCode
=
-
1
GOTO
Cleanup
END
END
IF
(
@TranStarted
=
1
)
BEGIN
SET
@TranStarted
=
0
COMMIT
TRANSACTION
END
IF
(
@ErrorCode
=
0
)
SELECT
@Password
,
@PasswordFormat
/**/
/*
如果错误代码为0,则返回密码和格式化的密码(这里才是主要的东西)
*/
RETURN
@ErrorCode
Cleanup:
IF
(
@TranStarted
=
1
)
BEGIN
SET
@TranStarted
=
0
ROLLBACK
TRANSACTION
END
RETURN
@ErrorCode
END
查看全文
相关阅读:
ASP.Net 显示
ASP.Net EF框架
ASP.Net redis存取方法
ASP.Net 红包
winform 代码生成textbox ,checkbox
c# winform 窗体 对话框绑定的值如何填到主窗体问题
c# / .net wFramework winform 之运行后的窗体窗口可拖动操作
托管调试助手 "DisconnectedContext":“针对此 RuntimeCallableWrapper 向 COM 上下文 0xd47808 的转换失败,错误如下: 系统调用失败。
使用C#语言,如何实现EPLAN二次开发 Api插件及菜单展示
winform 学习之qq邮箱正则验证及常用正则
原文地址:https://www.cnblogs.com/ruanbl/p/490054.html
最新文章
数据结构与算法小结——排序(六)
数据结构与算法小结——排序(五)
数据结构与算法小结——排序(四)
数据结构与算法小结——排序(三)
亲测好用的redis win10 安装&&开机自启动方法
crontab 使用整理
MySQL 事物的4种隔离级别
php 处理 10W 及以上csv 文件,使用生成器 yield
php sphinx 使用初探
mysql 触发器trigger
热门文章
ajax 提交 数据格式一个为 utf8 后台gbk格式文件接收乱码
wampserver3 多版本php 支持
windows环境wampserver3 切换 php7
php数组去重
ASP.Net 订单
ASP.Net SKU(2)
ASP.Net SKU
ASP.Net 登录控制器
ASP.Net 过滤器
ASP.Net Cookie
Copyright © 2011-2022 走看看