【发布时间】:2016-02-05 23:06:05
【问题描述】:
我继承了一个使用个人 SQL 帐户进行身份验证的 Web 应用程序。我需要更新登录过程以使用不同类型的哈希。
伪代码
if (login(newhash(password)) == 0) // login using new hash function doesn't work
{
if (login(oldhash(password)) == 1) // login with old hash works
{
SqlConnection.ChangePassword(connstr);
login(newhash(password));
}
}
问题是第二次登录(newhash(password) 不会立即起作用。如果我在 ChangePassword 和登录之间放置一个 System.Threading.Thread.Sleep(5000) 那么它会起作用。SqlConnection 正确关闭时做登录()
我也尝试改用 sp_password,但它仍然不会立即使用新密码进行身份验证。有没有办法消除这种“密码更改滞后”?
编辑:
我添加了 SqlConnection.ClearPool(conn) 并且问题仍然存在。 SQL Profiler 显示如下:
- 审核登录失败
- 审核登录
- SQL:BatchStarting
- SQLBatch 已完成
- 审核登录更改密码事件
- 审核登录
- 审核登录失败
所以一切都是从 1-6 开始的,但是我不知道 #7 是从哪里来的。
【问题讨论】:
-
你的代码能编译吗?因为 changepassword() 不接受单个参数。
-
也许是一个开放的事务,只是在一段时间后才提交?
-
我的代码可以编译。如果我等待大约 5 秒,则密码更改成功。
标签: asp.net sql-server