我有一个肯定存在的存储过程(下面),我试图以具有权限的用户身份执行它。我检查了这个次数比必要的多。但我仍然收到以下错误
无法找到对象[存储过程],因为它不存在或您没有权限
我发现如果我删除了权限,那么我会得到一条更准确的消息,说明我没有执行权限。
我尝试编写存储过程的脚本并给它一个不同的名称,但这也没有帮助。
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
答案 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],因为它不存在或者您没有权限" 错误消息。