对象的EXECUTE权限被拒绝

时间:2017-06-02 16:38:10

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

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

The EXECUTE permission was denied on object .... 

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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