tsql – T-SQL:盐渍密码
发布时间:2020-12-12 06:50:19 所属栏目:MsSql教程 来源:网络整理
导读:我正在寻找一个使用T-SQL存储过程腌制密码的示例.当然还有用于验证用户的匹配过程. CREATE PROC ChangePassword(@Username nVarChar(50),@ Password nVarChar(50)) CREATE PROC ValidateUser(@Username nVarChar(50),@ Password nVarChar(50)) 解决方法 首先,
我正在寻找一个使用T-SQL存储过程腌制密码的示例.当然还有用于验证用户的匹配过程.
CREATE PROC ChangePassword(@Username nVarChar(50),@ Password nVarChar(50)) CREATE PROC ValidateUser(@Username nVarChar(50),@ Password nVarChar(50)) 解决方法首先,我将在这里说道,并说数据库中的哈希密码在安全方面通常是一种不好的做法.您不会受到阻止流量嗅探器监视数据库流量的保护.防止这种情况的唯一方法是确保您与数据库的连接已加密,这通常意味着将加密数据库的所有其他流量.可以解决这个问题,但更好的解决方案是让应用程序进行散列处理.正如Sam Saffron所说,您可以使用Hashbytes函数来获取SHA1散列.如果您想要更好的算法,则需要创建CLR过程. Salting将涉及为每个用户存储加密随机值,然后将该值附加到密码并通过Hashbytes运行: Create Procedure ValidateUser @Username nvarchar(50),@Password nvarchar(50) As Declare @PasswordSalt varbinary(256) Set @PasswordSalt = ( Select PasswordSalt From Users Where Username = @Username ) If @PasswordSalt Is Null -- generate a salt? Declare @Hash varbinary(max) Set @Hash = Hashbytes('SHA1',@PasswordSalt + Cast('|' As binary(1)) + Cast(@Password As varbinary(100)) If Exists( Select 1 From Users Where Username = @Username And PasswordHash = @Hash ) -- user is valid Else -- user is not valid 请记住,盐应该是加密随机的,因此我不建议使用NewId().相反,我会使用.NET的RNGCryptoServiceProvider类生成它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |