Подтвердить что ты не робот

Параметр, оцененный таблицей в хранимой процедуре, получает разрешения на выполнение, отклоненные

Я получаю следующую ошибку при вызове хранимой процедуры, которая имеет параметр таблицы в качестве одного из параметров

Разрешение EXECUTE было отклонено для объекта "ValidationErrors"

ValidationErrors - это TVP, созданный со следующим утверждением:

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

Пользователь, выполняющий хранимую процедуру, имеет права на выполнение хранимой процедуры. Тем не менее, я все еще получаю вышеуказанную ошибку. Любые идеи?

4b9b3361

Ответ 1

Я думаю, вам также может потребоваться предоставить пользователю права доступа к типу.

Ссылки для разрешений GRANTing для типов:
SQL 2005
SQL 2008

Update:
Re: почему вы должны предоставлять разрешения на тип, когда у вас есть разрешения на sproc. Я не знаю окончательной причины, но BOL говорит:

В отличие от пользовательских типов, созданных используя sp_addtype, общедоступную базу данных роль автоматически не предоставляется ССЫЛКИ разрешает типы, которые создаются с использованием CREATE TYPE. Эта разрешение должно предоставляться отдельно.

Обновление 2: Для разрешения GRANT EXECUTE вы запустите это в SSMS:

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

Ответ 2

Как поясняет @chiefbrownbotom, причиной, по которой вам нужны разрешения на выполнение для типа таблицы, является то, что таблица создается до (и, следовательно, вне) вызова proc. Чтобы проиллюстрировать этот прогон трассировки SQL Profiler и вызвать ваш proc. Вы увидите нечто подобное, что может вас удивить...

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

Ответ 3

Управление грантами в TYPE:: schema.mytabletype к RoleOrMember

Это сработало для меня; Большое спасибо @chiefbrownbotom в комментарии выше.