проблема прав доступа к динамическому запросу, выполняемому в хранимой процедуре - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть эта хранимая процедура, выполняющая запрос на выборку с несколькими внутренними объединениями (одна из таблиц находится в другой базе данных). Теперь я должен был написать этот запрос как динамический, потому что сначала мне нужно было найти, какую БД следует выполнить запросу select. В любом случае, ни одна из таблиц не имеет прав доступа к ним, просто дает разрешение хранимой процедуре для роли базы данных «personel» (которая включает всех).

Но теперь, кто-то с личной ролью запускает этот хранимый процесс, он получает сообщение об ошибке «Отказано в разрешении SELECT для объекта« tbl_table », базы данных« Db », схемы« dbo »». нет никакой разницы в схеме, и есть другие процессы, использующие ту же таблицу, которые работают нормально.

Может ли быть причиной этого использование динамического запроса (exec (Use DB; select ...))? Как причина, потому что это динамично, я должен дать разрешения на таблицы также?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Короткий ответ - да.

Когда вы компилируете хранимую процедуру, проверяются разрешения пользователя / логина, создающего хранимую процедуру. Когда кто-то еще выполняет его, его способность читать эти таблицы больше не актуальна (в большинстве случаев), а лишь способность выполнять SP.

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

1 голос
/ 07 апреля 2011

Да, это может быть причиной. Прочитайте это , чтобы получить объяснение и возможное решение.

...