"无法找到对象[存储过程],因为它不存在或者你没有权限",当它确实存在且具有权限时

时间:2015-08-11 15:40:05

标签: sql-server permissions

我有一个肯定存在的存储过程(下面),我试图以具有权限的用户身份执行它。我检查了这个次数比必要的多。但我仍然收到以下错误

  

无法找到对象[存储过程],因为它不存在或您没有权限

我发现如果我删除了权限,那么我会得到一条更准确的消息,说明我没有执行权限。

我尝试编写存储过程的脚本并给它一个不同的名称,但这也没有帮助。

CREATE PROCEDURE [dbo].[Child_Get] 
    @ID int
AS
BEGIN
    SELECT * FROM [tblChilds] WHERE [ID] = @ID
END
GO

GRANT EXECUTE ON [dbo].[Child_Get] to 'BLAH\NT4Name'
GO

1 个答案:

答案 0 :(得分:1)

这很奇怪,但问题是" GRANT EXECUTE ......"存储过程后的语句。删除此行后,一切正常。

CREATE PROCEDURE [dbo].[Child_Get] @ID int
AS
BEGIN
    SELECT * FROM [tblChilds] WHERE [ID] = @ID
END
GO

我想象着" GRANT EXECUTE ...."不知何故神奇地被包含在存储过程中(尽管在BEGIN / END之外和GO之后)。这意味着某些用户具有定义执行sproc的权限,但没有足够的权限来执行" GRANT EXECUTE ...",这会导致非常误导 &#34 ;找不到对象[storedproc],因为它不存在或者您没有权限" 错误消息。