Какое разрешение мне нужно, чтобы использовать табличный параметр SQL Server (TVP) в качестве хранимого параметра proc?
Я использую SQL Server 2008 R2 и создал TVP, который хочу использовать в качестве параметра для хранимого процесса, но я получаю сообщение о том, что его нельзя найти или у меня нет разрешения.
Я могу использовать TVP в скрипте или в теле хранимого процесса, но когда я пытаюсь использовать его в качестве параметра, я получаю ошибку.
Какие-нибудь мысли?
Редактировать: для пояснения, ошибка, которую я получаю, заключается в создании сохраненного процесса
2 ответа
Для того, чтобы вызывающий абонент использовал PROC
с табличным параметром, вам нужно (не интуитивно) предоставить права на выполнение для TVP
типа тех, кто вызывает PROC
т.е.
GRANT EXECUTE ON TYPE::[schema].[MyTVP] to [SomeRole]
редактировать
Я полагаю, что смог воспроизвести проблему, работая с минимальным набором разрешений, предоставленных пользователю. Жизненно важным шагом для DBO или владельца схемы вашего TVP является предоставление вам следующего доступа к нему, чтобы иметь возможность использовать его в PROC
(без этого доступа я смог объявить свободную переменную типа TVP, но не использовать ее в PROC).
GRANT REFERENCES ON TYPE::[schema].[MyTVP] to YOURROLE -- Or User.
Ссылка на грант здесь(Очевидно, вам также понадобится CREATE PROCEDURE
разрешение плюс соответствующий доступ к любым объектам, используемым в PROC)
Потребители ПРОК должны также иметь GRANT EXECUTE
разрешение на Proc и на Type согласно первоначальному ответу.
Щелкните правой кнопкой мыши по значению вашего стола, которому вы хотите предоставить доступ. Возьмите свойства из контекстного меню.
1) Нажмите на вкладку "Разрешения" справа.
2) Найдите имя пользователя (SQL или Windows).
3) Выберите этого пользователя.
4) В разделе "Явные разрешения" внизу выберите "Предоставить права доступа" и нажмите "ОК".
5) нажмите ОК