gpt4 book ai didi

c# - 将一张表乘以自己并得到一个字段是什么意思?

转载 作者:行者123 更新时间:2023-11-30 22:17:41 26 4
gpt4 key购买 nike

这是WebMatrix.WebData.SimpleMembershipProvider.GetHashedPassword的源代码:

   private string GetHashedPassword(IDatabase db, int userId)
{
var pwdQuery = db.Query(@"SELECT m.[Password] " +
@"FROM " + MembershipTableName + " m, " + SafeUserTableName + " u " +
@"WHERE m.UserId = " + userId + " AND m.UserId = u." + SafeUserIdColumn).ToList();
// REVIEW: Should get exactly one match, should we throw if we get > 1?
if (pwdQuery.Count != 1)
{
return null;
}
return pwdQuery[0].Password;
}

您可以在 http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/SimpleMembershipProvider.cs 上找到它

并通过 .net 反射器检查 WebMatrix.WebData.dll

如果你检查代码,你可以看到一个 User 表 multiply self 并通过运行查询得到 Password 字段,简单的方法是这样的:

SELECT m.Password FROM [Users] m, [Users] u
WHERE m.[UserID] = 1 AND m.UserID = u.UserID

最佳答案

如果您查看 MembershipTableNameSafeUserTableName 之间的区别:

internal static string MembershipTableName
{
get { return "webpages_Membership"; }
}

private string SafeUserTableName
{
get { return "[" + UserTableName + "]"; }
}

// represents the User table for the app
public string UserTableName { get; set; }

所以 SafeUserTableName 实际上只是 [UserTableName] 可以单独设置,而 MembershipTableName 总是 "网页_成员(member)资格”。所以查询真正解析为(假设 UserTableName 设置为“Users”,userId 为“1”):

SELECT m.[Password]
FROM webpages_Membership m, [Users] u
WHERE m.UserId = 1 AND m.UserId = u.[UserID]

我认为数据实际上是在两个不同的表之间分开的,这有助于确保它为所有极端情况获得正确的值。具体来说,我认为它有助于确保它不会从 webpages_Membership 中为不再存在于 [Users] 中的用户检索散列密码(尽管我希望这两个条目都是如果用户从系统中删除,则会被删除,但也许这只是为了避免恶意使用而进行的双重检查)

编辑:也许它还允许使用多个“用户”表并为一个/多个应用程序共享相同的成员资格。因此,不同的“用户”表通常可能为不同的应用程序保留不同的信息,但“webpages_Membership”在所有 应用程序中维护一组全局用户/密码。当为特定应用程序设置 MembershipProvider 时,这会阻止不属于不同应用程序的用户访问散列密码。

即一个用户属于ApplicationA、ApplicationB,不属于ApplicationC。每个应用程序都有自己的“用户”表。 ApplicationA/ApplicationB 中的成员提供者可以访问用户的散列密码,但 ApplicationC 的成员提供者不能。但稍后,用户可以将他们的帐户“链接”到 ApplicationC,此时一个条目将添加到 ApplicationC.Users 表并且 GetHashedPassword 返回有效结果。

关于c# - 将一张表乘以自己并得到一个字段是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com