2010-02-11 5 views
17

매개 변수 중 하나로 테이블 반환 매개 변수가있는 저장 프로 시저를 호출하면 다음 오류가 발생합니다.저장 프로 시저의 테이블 반환 매개 변수가 실행 권한 거부 오류를 가져옵니다.

'ValidationErrors'개체에 대해 EXECUTE 사용 권한이 거부되었습니다.

ValidationErrors는 다음 문으로 작성된 TVP입니다. :

CREATE TYPE [dbo].[ValidationErrors] AS TABLE(
    [ErrorMessage] [varchar](255) NOT NULL 
) 

저장 프로 시저를 실행하는 사용자는 저장 프로 시저에 대한 실행 권한이 있습니다. 그러나, 나는 여전히 위의 오류가 발생합니다. 어떤 아이디어?

답변

32

사용자 권한을 부여해야 할 수도 있습니다. 유형에 권한을 부여하는

참고 :
SQL 2005
SQL 2008

업데이트 :
재 : 당신이 SPROC에 대한 사용 권한이 때 유형에 권한을 부여해야하는 이유. 나는 결정적인 이유를 모르겠지만, BOL는 말한다 :

sp_addtype을 사용 만든 사용자 정의 형식과 달리

, 공공 데이터베이스 역할이 자동으로 에 의해 생성 된 유형에 참조 권한이 부여되지 않는다 CREATE TYPE을 사용합니다. 이 권한은 별도로 부여해야합니다.

업데이트 2 : 실행 권한을 부여하려면, 당신은 SSMS에서 이것을 실행하는 것 :

GRANT EXECUTE ON TYPE::dbo.ValidationErrors TO SomeUser; 
+0

개체에 "제어"권한을 부여 했으므로 이제는 제대로 작동하고있는 것으로 보입니다. 단순히 "참조"및 "보기 정의"를 추가해도 도움이되지 않았습니다. 개인적으로 필자는 유형이므로 일반적으로 저장 프로 시저 실행이 허용 될 때 참조 된 개체에 부여 할 특정 사용 권한이 필요하지 않기 때문에 요구 사항을 이해하지 못합니다. 그러나 이것은 사용자가 "공용"역할을 수행하고 있다는 것과 관련이있을 수 있습니다. 의견이 있으십니까? – chiefbrownbotom

+0

컨트롤 대신 EXECUTE 권한을 부여하려고 했습니까? – AdaTheDev

+2

SQL 관리 스튜디오에서 실행 권한을 부여 할 곳이 없다는 것을 알았습니다. 나는 위에 열거 된 것을 보았다. 이 권한을 부여하려면 t-SQL을 사용해야합니까? – chiefbrownbotom

2

을 @chiefbrownbotom가 말했듯이, 당신은 테이블 유형이 있다는 것입니다에 대한 사용 권한을 실행해야 할 이유를 테이블은 proc를 호출하기 전에 생성된다. 이것을 설명하기 위해 SQL 프로파일 러 추적을 실행하고 proc을 호출하십시오. 당신은

이 나를 위해 일 RoleOrMember

에 ... TYPE : schema.mytabletype에

DECLARE @p1 TABLE AS YourTableType 
INSERT INTO @p1 (col1, col2, col3) VALUES ('val1','val2','val3') 
INSERT INTO @p1 (col1, col2, col3) VALUES ('val1','val2','val3') 
... 
EXEC usp_YourStoredProc @p1 
1

그랜트 컨트롤을 당신을 놀라게 할 수있는이 같은 것을 볼 것이다; 위의 코멘트에서 @chiefbrownbotom에게 많은 감사.

관련 문제