【问题标题】:EXECUTE permission denied on object对象的执行权限被拒绝
【发布时间】:2017-11-04 03:31:54
【问题描述】:

我目前正在开发一个 MVC5、EF6 项目,并且需要一个存储过程用于项目的一部分。我已经编写了存储过程,现在当我尝试在我的代码中使用它时,我收到一条错误消息:

The EXECUTE permission was denied on object .... 

然而,当我在 SQL Management Studio 中测试存储过程时,我可以很好地运行存储过程。我不确定该怎么做才能解决这个问题,因为我以前从未遇到过。

【问题讨论】:

  • 您在应用中的 sql 用户是否与您在 SSMS 中使用的用户相同?
  • 你应该授予用户执行权限
  • 检查您的 web.config 连接字符串以找到您连接到数据库的用户,然后将执行权限扩展到该用户
  • 进程很可能以与 SSMS 中不同的用户身份运行,和/或您在连接字符串中指定的凭据与 SSMS 中的凭据不匹配,和/或者您连接到错误的服务器/数据库。当事情似乎违背逻辑时,挑战你的假设
  • 您确实应该创建一个单独的帐户来从 WEB 应用程序访问 SQL 服务器。永远不要使用您的凭据!

标签: sql sql-server entity-framework stored-procedures


【解决方案1】:

首先创建一个执行者角色,然后授予该角色执行权限。然后让您的用户成为该角色的成员。

CREATE ROLE db_executor;
GRANT EXECUTE TO db_executor;
EXEC sp_addrolemember 'db_executor', 'user1'

希望这已经足够了,但如果您仍然有问题,请检查以下内容。 SP 和底层对象的架构所有者应该是相同的 sql 链接权限才能工作。 通过以下方式检查架构所有者:

select name, USER_NAME(s.principal_id) AS Schema_Owner from sys.schemas s

要更改架构的所有者,您可以:

ALTER AUTHORIZATION ON SCHEMA::YOUR_SCHEMA TO YOUR_USER;

例子:

ALTER AUTHORIZATION ON SCHEMA::Claim TO dbo
ALTER AUTHORIZATION ON SCHEMA::datix TO user1;

最后,如果您在您的 SP 中截断表或更改结构,您可能希望在您的 SP 中添加 WITH EXECUTE AS OWNER:

ALTER procedure [myProcedure] 
WITH EXECUTE AS OWNER

as

truncate table etl.temp

【讨论】:

    【解决方案2】:

    创建一个具有“执行”访问权限的单独用户角色,然后将其分配给您当前的用户。这是最好的解决方案,帮助了我。

    请点击此链接: https://stackoverflow.com/a/26871428/6761105

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2010-09-25
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多