ASP.Net Membership.DeleteUser

ASP.Net Membership.DeleteUser,asp.net,asp.net-membership,database-permissions,Asp.net,Asp.net Membership,Database Permissions,在测试中,我使用的数据库上的用户是一个大jefe。在生产中,他只有执行力 当我打电话时 Membership.DeleteUser(user) 在测试中,它起了作用。 我在生产中也尝试了同样的方法,我得到了以下结果: DELETE语句与引用约束冲突 FK___aspnet_Us______用户i____37703C52。数据库中发生冲突 测试,表dbo.aspnet_UsersInRoles,列“UserId” 在我的谷歌搜索中,我遇到了这个问题 那家伙说 错误:DELETE语句冲突 带引用约

在测试中,我使用的数据库上的用户是一个大jefe。在生产中,他只有执行力

当我打电话时

Membership.DeleteUser(user)
在测试中,它起了作用。 我在生产中也尝试了同样的方法,我得到了以下结果:

DELETE语句与引用约束冲突 FK___aspnet_Us______用户i____37703C52。数据库中发生冲突 测试,表dbo.aspnet_UsersInRoles,列“UserId”

在我的谷歌搜索中,我遇到了这个问题 那家伙说

错误:DELETE语句冲突 带引用约束 FK\uuuu aspnet\u Me\uuuu UserI\uuuuuu 15502E78。这个 数据库中发生冲突 你的名字,桌子 dbo.aspnet_成员资格,列 “用户ID”

我花了一段时间才找到解决问题的办法 这将跨越多个站点和选项 作为错误和可能的解决方案 这是相当误导的。结果,至少 至少对我来说,这是个问题 具有成员资格的权限 数据库我使用的用户 connect有权查看 数据库中的成员详细信息 本身,但作为 aspnet\u用户\u删除存储的用户 它从 sysobjects表。成员 连接用户显然没有 我有足够的权利这样做 选择此选项以使整体删除失败

我的解决办法是将用户添加到 aspnet_成员资格_完全访问角色 用于成员数据库


但当我这么做的时候,它没有起作用。有人知道如何处理这个问题吗?

我相信您的“引用”约束实际上是数据库中存在于aspnet\u Users表和aspnet\u UsersInRoles表之间的外键。我认为您正在尝试的用户在两个表中都有它的UserId,在您可以从Users表中删除它之前,还必须从UsersInRoles表中删除它


您是否已尝试确保从此用户中删除所有角色?您也可以通过检查数据库中这两个表的行来进行验证。

好的,猜猜怎么着?我读到:

好的,发完邮件几分钟后 我找到了解决办法:结果是 必须添加SELECT权限 用于上的ASPNET用户 vw_aspnet_会员资格用户视图

但我为什么不这么做还是个谜 得到一个关于缺少数据的错误 准许EXIST语句只是 返回false

给了生产用户选择权限,瞧! 它起作用了!
谢谢大家

如果在vw_aspnet_MembershipUsers上授予ASP用户选择权后,错误或类似情况仍然存在,则您可能希望为其他一些vw_aspnet_授予选择权????观点也一样。特别是配置文件和用户角色。否则-由于某些原因,DeleteUser SP在从这些视图中进行选择时会得到一个空结果,并拒绝首先从这些视图中删除现有条目。

我也有此问题,这是由于缺少视图造成的。为了更正此问题,我只使用了另一个数据库中的创建脚本,并重新创建了所有vw_aspnet_*视图

稍作检查后,我发现问题在于aspnet\u Users\u DeleteUser存储过程中的这一行:

IF ((@TablesToDeleteFrom & 1) <> 0 AND
    (EXISTS (SELECT name FROM sysobjects WHERE (name = N'vw_aspnet_MembershipUsers') AND (type = 'V'))))
其他3个表中还有3个类似的行。问题是,如果执行存储过程的用户没有访问vw_aspnet_MembershipUsers的权限,那么在从sysobjects中选择时,它将不会出现。我很想知道为什么整个EXISTS声明是必要的


不管怎样,下面的讨论有答案。通过对相关视图授予视图定义,EXISTS语句现在将成功,并且您不必在应用程序的连接字符串中向用户授予不必要、不需要或过多的权限。

最好确保执行delete成员资格的用户具有更正ASP.NET成员资格sql角色的权限。 在我的例子中,我删除了一个具有一些角色和配置文件属性的membershipuser。delete方法失败,但在分配了正确的sql角色后,它工作了

ALTER ROLE [aspnet_Profile_FullAccess] ADD MEMBER [<YOUR SQL USER>]
ALTER ROLE [aspnet_Roles_FullAccess] ADD MEMBER [<YOUR SQL USER>]

如果您正在使用[aspnet\u Personalization\u FullAccess]功能,也可以添加该功能。

我通过删除过程中检查视图的行来解决这个问题。我并没有任何asp成员视图,也并没有在任何地方需要它们,所以创建视图以使代码行能够返回true似乎是毫无意义的——proc实际上并没有使用该视图。如果您使用成员资格对象的更多功能,您可能需要其他视图。无论哪种方式,检查视图的存在对于proc决定aspnet_成员表是否有需要删除的行来说都是一种奇怪的方式

IF ((@TablesToDeleteFrom & 1) <> 0 
    )
    --AND
    --   (EXISTS (SELECT name FROM sysobjects WHERE (name = N'vw_aspnet_MembershipUsers') AND (type = 'V'))))

这没有道理。。如果用户对存储过程aspnet\u Users\u DeleteUser具有执行权限,则视图上的选择权限应该无关紧要。就像对任何aspnet表拥有删除权限一样,这并不重要。