Откуда получается результат OBJECT_NAME(@@PROCID)? (опечатка исправлена)

У меня есть хранимая процедура, в которой EXECUTE AS есть другой пользователь с очень ограниченным доступом. Я не могу получить результаты от OBJECT_NAME(@@PROCID) при запуске этой хранимой процедуры. @@PROCID имеет значение, поэтому поиск не выполняется.

Я думаю, что это проблема с разрешениями, так может кто-нибудь сказать мне, откуда берется имя хранимой процедуры? Возможно, я смогу исправить мою проблему, предоставив некоторые разрешения SELECT пользователю EXECUTE AS.

Если у кого есть другие идеи, ЛМК. Я сейчас жестко запрограммировал имя хранимой процедуры.

1 ответ

Решение

Из документации для OBJECT_ID:

Пользователь может просматривать только метаданные защищаемых объектов, которыми он владеет или на которые ему было предоставлено разрешение. Это означает, что встроенные функции, генерирующие метаданные, такие как OBJECT_ID, могут возвращать NULL, если у пользователя нет прав доступа к объекту.

Кроме того, дальнейшее чтение также скажет вам, что вам нужно предоставить пользователю любое разрешение на объект (например, SELECT, EXECUTE и т. Д.)

Другие вопросы по тегам