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

Разрешение EXECUTE отклоняется в пользовательских типах таблиц?

У меня есть вопрос о Пользовательских типах таблиц в SQL Server 2008.

Для использования одного из приложений ASP.NET мы определили наши собственные типы таблиц на SQL Server 2008, чтобы использовать их в качестве параметров в хранимых процедурах (при выполнении команды sql в приложении ASP.NET мы передаем объект DataTable в качестве параметра для хранимой процедуры см. здесь пример)

Проблема заключается в том, что когда мы запускаем команду Sql (выполняем хранимую процедуру) из ASP.NET, получаем ошибку:

Разрешение EXECUTE было отклонено по объекту 'ourTableType', база данных 'ourDatabase', схема 'ourSchema'.

Почему это так? Почему нам нужно установить разрешение на пользовательские типы таблиц? Почему недостаточно иметь разрешение, установленное только на хранимой процедуре, которая его использует? И если мы должны установить его независимо от того, почему нет типа разрешения EXECUTE для установки в окне свойств вообще (я могу видеть только Control, References, Take Ownership, View Definition)?

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

4b9b3361

Ответ 1

Я действительно надеюсь, что вы решили это сейчас, потому что вопрос уже почти 4 месяца, но в случае, если вы этого не сделали, вот что я думаю, это ответ.

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO

Ответ 2

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

Один рабочий процесс - изменить хранимую процедуру для запуска в качестве другого пользователя. Если вы запустите его как САМО, он будет запущен под создателем хранимой процедуры, что крайне опасно. Тем не менее, если у вас нет другого варианта:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF