对象'aspnet_CheckSchemaVersion',数据库'XXX'上的EXECUTE权限被拒绝

时间:2011-10-10 09:33:16

标签: asp.net sql-server-2008 asp.net-membership

我在MS SQL 2008中使用asp.net 4 c#和实体框架4.我正在尝试使用IIS 7在本地设置我的Web应用程序。

对于我的网站,我的用户Asp会员提供商已经在我的db(aspnet _)中安装了不同的表和sprocs。

运行脚本我们收到此错误:

The EXECUTE permission was denied on the object 'aspnet_CheckSchemaVersion', database 'XXX', schema 'dbo'.     at System.Data.SqlClient.SqlConnection.OnError
  • 我该如何解决这个问题? 请给我明确的指示。谢谢你的支持。

4 个答案:

答案 0 :(得分:23)

应该有一些与成员资格表相关的数据库角色,例如aspnet_profile_fullaccess。确保您使用的帐户是相应角色的成员。

您不应将连接到数据库的用户指定为dbowner权限。该帐户应该只拥有它需要的权利&而已。如果您授予dbo&有人利用你网站上的一个漏洞,他们会完全不受控制地访问你的整个数据库到他们想要的东西 - 删除表格,随意改变数据。

答案 1 :(得分:3)

我认为你不应该让用户成为db_owner。我遇到了同样的问题,只需将BasicAccess的4个角色扩展到我的用户+就可以对所有存储过程授予EXECUTE权限:

GRANT EXECUTE T​​O [theUserName];

我知道这不太理想。应该只对所需的存储过程授予EXECUTE权限,但如果您需要快速解决方案,直到找到您的用户需要能够执行的SP,那么这应该有效。

答案 2 :(得分:1)

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

因此,请检查SQL Server 2008中针对此特定用户的权限。并且如果可能的话,将此用户作为dbowner。

希望这会有所帮助......

编辑:我希望您将其设为dbowner,以确认存在一些权限问题,一旦确定问题,就可以为该用户分配权限。因此知道确切的原因和确切的解决方案。

答案 3 :(得分:0)

我同意可以通过添加db_owner角色来验证权限错误来进行测试。但是应该紧迫提醒您仅进行测试,并确保删除该角色。

右键单击登录用户>>选择属性>>然后选择用户映射。

查看提供的SQL错误,您可以推测这是基于“执行许可被拒绝”的问题。在使用db_owner角色作为测试和确认之后,然后可以查看各种SQL语句以查看正在调用什么存储过程。例如,考虑以下

SQL As String =“ EXEC [EAC]。[myStoredProcedure]”等。 。 。 “

找出应用程序所使用的各种存储过程之后,您便可以在这些特定执行中授予执行权限。例如,考虑以下SQL。

USE DATABASE
GRANT EXECUTE ON OBJECT::EAC.myStoredProcedure
TO myRoleorUser; 

请注意,代码中提到的EAC.myStoredProcedure是在扩展数据库,然后在“可编程性”和“存储过程”中找到的。

此处是Microsoft KB,可用于进一步针对SQL Server上的特定存储过程提供帮助。 https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/grant-permissions-on-a-stored-procedure?view=sql-server-2017