我在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
答案 0 :(得分:23)
应该有一些与成员资格表相关的数据库角色,例如aspnet_profile_fullaccess。确保您使用的帐户是相应角色的成员。
您不应将连接到数据库的用户指定为dbowner权限。该帐户应该只拥有它需要的权利&而已。如果您授予dbo&有人利用你网站上的一个漏洞,他们会完全不受控制地访问你的整个数据库到他们想要的东西 - 删除表格,随意改变数据。
答案 1 :(得分:3)
我认为你不应该让用户成为db_owner。我遇到了同样的问题,只需将BasicAccess的4个角色扩展到我的用户+就可以对所有存储过程授予EXECUTE权限:
GRANT EXECUTE TO [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