2010-02-11 7 views
17

pojawia się następujący błąd podczas wywoływania procedury przechowywanej, która ma tabelę o wartości parametru jako jeden z parametrówTabela ceniony parametr w procedurze przechowywanej dostaje uprawnienia wykonywania odmówiono błąd

Pozwolenie EXECUTE odmówiono na „ValidationErrors obiektowych "

ValidationErrors jest TVP stworzony z następującym stwierdzeniem:

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

użytkownik wykonujący procedury przechowywanej ma wykonać uprawnienia w procedurze przechowywanej. Nadal jednak otrzymuję powyższy błąd. Jakieś pomysły?

Odpowiedz

32

Myślę, że być może trzeba również udzielić użytkownikowi uprawnień do typu.

Referencje o nadanie uprawnień do typów:
SQL 2005
SQL 2008

Aktualizacja:
Re: dlaczego trzeba przyznać uprawnienia na typ, gdy masz uprawnienia do sproc. nie wiem ostateczny powód, ale BOL mówi:

odróżnieniu od typów zdefiniowanych przez użytkownika utworzonych przez korzystających sp_addtype, baza danych publicznych rola nie jest automatycznie pozwolenie referencje na typy, które są tworzone przez używając CREATE TYPE. To zezwolenie na musi być przyznane osobno.

Aktualizacja 2: do przyznania uprawnienia do wykonywania, można by uruchomić to w SSMS:

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

Udzieliłem obiektowi "kontroli" obiektu i wygląda na to, że działa teraz dobrze. Po prostu dodanie "referencji" i "definicji widoku" nie pomogło. Osobiście nie rozumiem tego wymogu, ponieważ jest on typem, a generalnie, gdy udzielono procedury przechowywanej, obiekty referencyjne nie wymagają specjalnych uprawnień. Może to mieć jednak związek z faktem, że użytkownik jest w roli "publicznej". Jakieś myśli? – chiefbrownbotom

+0

Czy próbowałeś przyznać uprawnienia EXECUTE (zamiast kontroli)? Być może warto to wypróbować zanim ucieknę do kontroli – AdaTheDev

+2

Nie widziałem żadnego miejsca na przyznanie wykonania ze studia zarządzania sql. Widziałem tylko te wymienione powyżej. Czy muszę użyć t-sql, aby udzielić tego? – chiefbrownbotom

2

Jak @chiefbrownbotom mówi, dlaczego trzeba wykonać uprawnienia na typ tabeli jest to, że tabela jest tworzona przed (a więc i poza) wywołaniem proc. Aby to zilustrować, uruchom śledzenie programu SQL Profiler i wywołaj proces. Zobaczysz coś takiego co może cię zaskoczyć ...

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

Grant Sterowanie typu :: schema.mytabletype do RoleOrMember

ten pracował dla mnie; bardzo dziękuję @chiefbrownbotom w komentarzu powyżej.

Powiązane problemy