对于糟糕的头衔感到抱歉,并不确定如何说出来。
我一直在尝试在SQL Server中实现HASHBYTES
函数来加密密码。我使用这个tutorial作为模板来帮助我,因为我觉得它非常详细。
我制作了这个程序来创建我的新用户;
create proc AddUser
@User_Name nvarchar(50),
@Password nvarchar(50),
@Organisation_ID int,
@Email nvarchar(254) = null,
@Phone nvarchar(15) = null,
@AllowPMR bit,
@CCAddress nvarchar(254) = null,
@Active_User bit,
@responseMessage nvarchar(250) output
as
begin
set nocount on
declare @Salt uniqueidentifier=newid()
begin try
insert into dbo.[Users]
(User_ID,User_Name,Password,Organisation_ID,Email,Phone,AllowPMR,PWDChanged,CCAddress,Active_User,Salt)
values((select max(USER_ID) from Users)+1,@User_Name,HASHBYTES('SHA2_512',@Password+cast(@Salt as nvarchar(36))),@Organisation_ID,@Email,@Phone,@AllowPMR,GETDATE(),@CCAddress,@Active_User,@Salt)
set @responseMessage='Success'
end try
begin catch
set @responseMessage=ERROR_MESSAGE()
end catch
end
然后我像这样执行AddUser
存储过程;
DECLARE @responseMessage NVARCHAR(250)
exec Adduser
@User_Name = 'username',
@Password = 'passwords?lol',
@Organisation_ID = 1,
@AllowPMR = 1,
@Active_User = 1,
@responseMessage=@responseMessage OUTPUT
返回
命令已成功完成。
但是当我查看我的用户表中的内容时,没有添加任何内容。我是否误读了教程,或者我的查询有问题?
答案 0 :(得分:1)
删除try
/ catch
块。如果insert
由于某种原因失败,那么您正在捕获错误。但是,您没有对它执行任何操作,因此存储过程将成功。您还可以在运行该过程后打印错误消息。删除异常处理更具戏剧性。
构造(select max(USER_ID) from Users)+1
也是可疑的。您只需将user_id
定义为identity
列,然后让数据库为您进行递增。
答案 1 :(得分:0)
如果插入失败没有任何错误,你也可以在insert语句下使用rowcount函数,
if(@@ROWCOUNT<=0)
BEGIN
set @responseMessage='Insert fail'
END