我目前正在开发一个MVC5,EF6项目,并且需要一个项目的存储过程。我已经编写了存储过程,现在当我尝试在我的代码中使用它时,我得到一个错误说:
The EXECUTE permission was denied on object ....
然而,当我在SQL Management Studio中测试存储过程时,让我运行存储过程就好了。我不知道该怎么做才能解决这个问题,因为我以前从未遇到过这个问题。
答案 0 :(得分:0)
创建一个具有访问权限的单独用户角色'执行'然后将其分配给您当前的用户。这是最好的解决方案并帮助了我。
答案 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