当前位置:  开发笔记 > 编程语言 > 正文

ASP.Net Membership.DeleteUser

如何解决《ASP.NetMembership.DeleteUser》经验,为你挑选了2个好方法。

在测试中,我使用的db上的用户是一个很大的jefe.在制作中,他只有Execute.

我打电话的时候

Membership.DeleteUser(user)

在测试中,它起作用了.我在制作中尝试相同,我得到了这个:

DELETE语句与REFERENCE约束"FK__aspnet_Us__UserI__37703C52"冲突.冲突发生在数据库"Testing",表"dbo.aspnet_UsersInRoles",列'UserId'中.

在我的搜索中(在Google上搜索),我遇到了这个 家伙说的链接,

错误:DELETE语句与REFERENCE约束"FK__aspnet_Me__UserI__15502E78"冲突.冲突发生在数据库"YourDBName",表"dbo.aspnet_Membership",列"UserId"中.

我花了一些时间在多个站点和选项中找到解决方案,因为错误和可能的解决方案相当误导.事实证明,至少在我的情况下,这是成员资格数据库的权限问题.我用来连接的用户有权查看数据库本身的成员资格详细信息,但作为aspnet_Users_DeleteUser存储过程的一部分,它从sysobjects表中选择.成员资格连接用户显然没有足够的权限进行选择,因此整体删除失败.

我的修复是将用户添加到成员资格数据库的aspnet_Membership_FullAccess角色.

但是当我这样做时它没有用.任何人对如何处理这个都有任何想法?



1> Matt..:

经过一点检查后,我发现aspnet_Users_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声明是必要的.

无论如何,下面的讨论," 访问sysobjects以查看用户表而无需直接在SQL Server安全性中访问用户表 ",可以得到答案.通过在相关视图上授予"查看定义",EXISTS语句现在将成功,您不必在应用程序的连接字符串中向用户授予不需要的,不需要的或过多的权限.



2> 小智..:

我也有这个问题,它是由缺少视图引起的,为了纠正我只是使用了来自另一个数据库的创建脚本并重新创建了所有vw_aspnet_*视图.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有