У меня есть база данных, которая имеет роль приложения. Все члены роли принадлежат к группе в Active Directory. Вместо предоставления разрешений роли для выбора из таблиц я предоставил разрешения на выполнение роли для всех хранимых процедур, которые необходимо вызвать.Разрешения SQL Server для хранимых процедур с динамическим SQL
Это работает отлично, за исключением одной из моих хранимых процедур, которая создает некоторый динамический SQL и вызывает sp_executesql.
Динамический SQL выглядит вроде как это:
SET @SQL = N'
SELECT *
FROM dbo.uvView1
INNER JOIN uvView2 ON uvView1.Id = uvView2.Id'
EXEC sp_executesql @SQL
Пользователи в этой роли не удается вызвать хранимую процедуру. Он дает следующую ошибку, которая является вроде ожидаемой. Я полагаю:
Разрешение SELECT было отклонено на объект «uvView1», база данных «Foobar», схема «dbo».
Есть ли способ, которым мои пользователи могут успешно выполнить этот процесс без предоставления прав доступа ко всем представлениям в динамическом SQL?
У пользователя есть доступ к этому виду, не так ли? Я не думаю, что безопасность заботится о том, как они к нему обращаются. – JNK
Это единственный проком, который терпит неудачу, и он не терпит неудачу с разрешениями на выполнение proc ... он специально говорит мне, что он может SELECT из представления ... так что я предполагаю, что это имеет какое-то значение. – Dismissile