拒绝在数据库 'XXX' 中的对象 'aspnet_CheckSchemaVersion' 上执行EXECUTE权限。

18
我使用asp.net 4 C#和entity framework 4与MS SQL 2008。我正在尝试使用IIS 7在本地设置我的Web应用程序。 我的网站使用Asp成员资格提供程序,在我的数据库中安装了不同的表和sprocs(aspnet_)。 运行脚本时,我们收到此错误: “对对象'aspnet_CheckSchemaVersion'的执行权限被拒绝,数据库为“XXX”,模式为“dbo”。在System.Data.SqlClient.SqlConnection.OnError处。”如何解决这个问题?

4
你是"nob"? 我想你的意思应该是"noob",但这是个搞笑的笔误。 - Simon Halsey
在这里回答:http://stackoverflow.com/questions/16134262/execute-permission-denied-aspnet-roles-roleexists?answertab=active#tab-top - Duke Hall
4个回答

27

应该有一些与会员表相关的数据库角色,例如 aspnet_profile_fullaccess。确保你正在使用的帐户是适当角色的成员。

你不应将连接到数据库的用户分配为dbowner权限。账户只应具备所需的权限,没有多余的权限。如果授予 dbo 权限并且某人利用站点中的漏洞,他们将完全无限制地访问整个数据库,并对其想要的内容进行更改或删除数据表。


谢谢Simone,我仔细阅读了你的回答并且同意你的观点。 - GibboK
2
我正在连接的用户已被分配了所有 aspnet_* 角色,但我仍然收到此错误消息。似乎唯一的解决方法是添加 dbowner 角色。你知道有什么可能导致这种情况吗? - ajbeaven
1
你可能需要运行ASP.NET SQL Server注册工具: http://msdn.microsoft.com/zh-cn/library/ms229862(v=vs.100).aspx - arni

6
我认为你不应该将用户设置为db_owner。我曾经遇到过类似的问题,只需授予我的用户4个具有BasicAccess的角色,并在所有存储过程上授予他EXECUTE权限即可解决此问题:
GRANT EXECUTE TO [用户名];
我知道这不是理想的做法。应该仅在需要的存储过程上授予EXECUTE权限,但如果你需要一个快速解决方案,直到找到用户需要执行哪些SP's,这样做应该可以解决问题。

1

问题在于应用程序登录的用户ID在数据库中没有足够的权限。它需要成为数据库所有者或被赋予对所有aspnet_存储过程的许可。

因此,请检查SQL Server 2008中这个特定用户的权限。如果可能,请将该用户设置为dbowner。

希望这可以帮到你...

编辑: 我想让你将其设置为dbowner,只是为了验证是否存在某些权限问题,一旦确定了问题,你就可以为该用户分配权限了。因此,知道确切的原因和确切的解决方案。


1
因为建议将用户设为dbowner而被投票否决。我知道你在编辑中有所限制,但我知道这种说法可能很危险。 - awrigley

1
我同意可以通过添加db_owner角色来测试以验证权限错误。但是应该紧急提醒只进行测试,并确保删除该角色。
右键单击登录用户>>选择属性>>然后选择用户映射。
查看提供的SQL错误,您可以根据“拒绝执行权限”推断出这是问题所在。在使用db_owner角色进行测试和确认之后,可以查看各种SQL语句以查看调用了哪些存储过程。例如,请考虑以下内容:
SQL字符串=“EXEC [EAC] .[myStoredProcedure]”等等……
找出应用程序使用的各种存储过程之后,您可以授予对这些特定执行的执行权限。例如,请考虑以下SQL。
USE DATABASE
GRANT EXECUTE ON OBJECT::EAC.myStoredProcedure
TO myRoleorUser; 

请注意代码中提到的EAC.myStoredProcedure是在展开数据库,然后展开程序性和展开存储过程时找到的。
以下是微软KB,可帮助针对SQL服务器上的特定存储过程进行定位。 https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/grant-permissions-on-a-stored-procedure?view=sql-server-2017

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接