存储过程返回值



我已经在SQL Server上实现了Bcrypt。它运行良好。

我现在正试图创建一个过程,用户可以在其中发送他的用户名和密码(未加密(,该过程将返回是否允许他这样做。

CREATE PROCEDURE CONNECTION
@Login_name VARCHAR(15),
@not_hashed_pass CHAR(15)
AS
BEGIN
DECLARE @is_match BIT
SET @is_match = (SELECT
dbo.CheckPassword(@not_hashed_pass, 
(SELECT user_password FROM USERS 
WHERE LOGIN_NAME= @Login_name)))
IF @is_match = 1 
PRINT 'connected'
ELSE
PRINT 'not connected'    
END

如果我执行该过程,我会得到以下结果

未连接(@is_match=0(

如果我试图执行我设置为@is_match的查询,但是:

SELECT
dbo.CheckPassword('azeqsd456789', 
(SELECT user_password FROM USERS 
WHERE LOGIN_NAME = 'Bob))

我收到一个返回的1

查询和过程都使用相同的值执行。

除了使用散列密码外,您的问题是char()varchar()的混淆。您的程序声明为:

CREATE PROCEDURE CONNECTION (
@Login_name varchar(15),
@not_hashed_pass char(15)
)

您传递的密码有12个字符,因此它被填充了三个空格到''azeqsd456789 '。因此,它们不匹配。

我建议修正程序定义:

CREATE PROCEDURE CONNECTION (
@Login_name varchar(15),
@not_hashed_pass varchar(15)
)

但更重要的是,我强烈建议您永远不要使用明文密码,并始终对其进行哈希处理。

最新更新