Irw*_*win 9 asp.net asp.net-membership database-permissions
在测试中,我使用的db上的用户是一个很大的jefe.在制作中,他只有Execute.
我打电话的时候
Membership.DeleteUser(user)
Run Code Online (Sandbox Code Playgroud)
在测试中,它起作用了.我在制作中尝试相同,我得到了这个:
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角色.
但是当我这样做时它没有用.任何人对如何处理这个都有任何想法?
经过一点检查后,我发现aspnet_Users_DeleteUser存储过程中存在问题:
IF ((@TablesToDeleteFrom & 1) <> 0 AND
(EXISTS (SELECT name FROM sysobjects WHERE (name = N'vw_aspnet_MembershipUsers') AND (type = 'V'))))
Run Code Online (Sandbox Code Playgroud)
其他3个表有3个其他类似的行.问题是,如果执行存储过程的用户无权访问vw_aspnet_MembershipUsers,则从sysobjects中选择时不会出现.我很想知道为什么整个EXISTS声明是必要的.
无论如何,下面的讨论," 访问sysobjects以查看用户表而无需直接在SQL Server安全性中访问用户表 ",可以得到答案.通过在相关视图上授予"查看定义",EXISTS语句现在将成功,您不必在应用程序的连接字符串中向用户授予不需要的,不需要的或过多的权限.
好吧,你猜怎么着?我读到了这个:\n http://forums.asp.net/t/1254087.aspx
\n\n\n\n\n好的,在发送我的帖子几分钟后,\n 我找到了解决方案:) 事实证明,\n 必须在 vw_aspnet_MembershipUsers 视图上为 ASPNET 用户添加 SELECT PERMISSION。
\n\n但为什么我没有\xe2\x80\x99t\n 收到有关缺乏\n 权限的错误仍然是个谜。EXIST 语句只是返回 false。
\n
并授予生产用户 SELECT 权限,瞧!\n它有效!\n谢谢大家!
\n 归档时间: |
|
查看次数: |
9485 次 |
最近记录: |