Табличный параметр в хранимой процедуре получает ошибку «Отказано в разрешениях на выполнение» - PullRequest
19 голосов
/ 11 февраля 2010

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

В разрешении EXECUTE отказано для объекта 'ValidationErrors'

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

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

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

Ответы [ 3 ]

34 голосов
/ 11 февраля 2010

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

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

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

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

Обновление 2: Чтобы предоставить разрешение EXECUTE, вы должны запустить это в SSMS:

GRANT EXECUTE ON TYPE::dbo.ValidationErrors TO SomeUser;
2 голосов
/ 09 октября 2010

Как говорит @chiefbrownbotom, причина, по которой вам нужны разрешения на выполнение для типа таблицы, заключается в том, что таблица создается до (и, следовательно, вне) вызова процедуры Чтобы проиллюстрировать это, запустите трассировку 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
1 голос
/ 28 октября 2011

Предоставить контроль над TYPE :: schema.mytabletype для RoleOrMember

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...