精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● ASP>>个人专栏>>yahao>>用户登录的存贮过程代码

主题:用户登录的存贮过程代码
发信人: yahao(亚豪)
整理人: i_am_trueman(2004-01-14 09:24:34), 站内信件
我写的一个用户登录的存贮过程代码,SHOW SHOW,呵呵。

/*
'##############################################################################
'## Copyright (C) 1998-2003 Yahao Software Studio
'##
'## 存贮过程:系统用户登录
'##
'##
'##
'## Code by Yahao
'##############################################################################
'## FileDate: 2003-12-10
*/

-- Remove the existing Stored Procedure --
if (exists (select * from sysobjects where name = 'usp_AdminLogin' and type = 'P'))
drop proc usp_AdminLogin

go

CREATE PROCEDURE usp_AdminLogin
(
---- 帐号名 ----
@LoginName            varchar(12),
---- 登录密码 ----
@LoginPass            varchar(12),
---- 是否大小写敏感 ----
@CaseSensitive        tinyint,
---- 帐号权限 ----
@UserRight            int OUTPUT,
---- 帐号SID ----
@UserSID              varchar(16) OUTPUT,

---- 返回值 ----
@ReturnValue          int OUTPUT
)
WITH ENCRYPTION
AS

SET NOCOUNT ON

DECLARE @intUserRight int,@strLoginPass varchar(32)
DECLARE @strLoginName As varchar(12),@intStatus tinyint
DECLARE @strUserSID varchar(16),@CaseMsg As varchar(120)

DECLARE @strHashPwd As varchar(32)

SELECT
@strLoginName = LoginName,
@strLoginPass = LoginPass,
@intUserRight = UserRight,
@strUserSID = SID,
@intStatus = Status
FROM Account
WHERE
LoginName = @LoginName
And
Status & 1 = 0

---- 帐号不存在 ----
IF @@ROWCOUNT = 0
BEGIN
SET @ReturnValue = 1
RAISERROR ('用户 %s 不存在,如有疑问请与管理员联系!',16,1,@LoginName)
RETURN
END

SET @strLoginPass = ISNULL(@strLoginPass,'')
SET @intUserRight = ISNULL(@intUserRight,0)
SET @intStatus = ISNULL(@intStatus,0)

---- 被锁定 ----
IF @intStatus & 2 = 2
BEGIN
SET @ReturnValue = 2
RAISERROR ('用户(%s)已经被锁定,如有疑问请与管理员联系!',16,1,@LoginName)
RETURN
END

---- 大小写敏感提示信息 ----
IF @CaseSensitive = 1
SET @CaseMsg = '用户名和密码是区分大小写的。'
ELSE
SET @CaseMsg = ''

---- 比较登录名是否正确(区分大小写),返回0表示输入登录名正确 ----
IF dbo.fun_StrComp(@LoginName,@strLoginName,@CaseSensitive) = 1
BEGIN
SET @ReturnValue = 3
RAISERROR ('用户登录名(%s)输入错误,请重新输入!%s',16,1,@LoginName,@CaseMsg)
RETURN
END

---- 登录密码为空时不允许登录 ----
IF LEN(@strLoginPass) = 0
BEGIN
SET @ReturnValue = 4
RAISERROR ('用户(%s)登录密码数据错误,请联系管理员!%s',16,1,@LoginName,@CaseMsg)
RETURN
END

---- 计算MD5加密字符串:密码 ----
EXEC master..xp_ctnhash 11, @LoginPass, @strHashPwd OUTPUT

---- 比较密码是否正确(区分大小写),返回0表示输入密码正确 ----
IF dbo.fun_StrComp(@strHashPwd,@strLoginPass,@CaseSensitive) = 1
BEGIN
SET @ReturnValue = 5
RAISERROR ('用户(%s)登录密码输入错误,请重新输入!%s',16,1,@LoginName,@CaseMsg)
RETURN
END

IF @intUserRight >= 1
BEGIN
UPDATE Account
SET LoginCount = LoginCount + 1
WHERE LoginName = @LoginName
END

---- 设定返回值 ----
SET @UserRight = @intUserRight
SET @UserSID = @strUserSID

SET @ReturnValue = @@ERROR

SET NOCOUNT OFF


----
绿色签名 - 欢迎光临网易广州虚拟社区ASP版

[关闭][返回]