У меня есть сценарий использования, в котором я хочу, чтобы пользователь (с очень ограниченными правами) мог восстановить резервную копию. Для этого пользователю необходимы CREATE
разрешения на уровне сервера. Мы не можем дать это разрешение пользователю. Поэтому идея заключалась в том, чтобы предоставить ему права на выполнение хранимой процедуры, которая восстанавливает базу данных.
Я нашел возможное решение здесь: Выполнить хранимую процедуру как разрешение другого пользователя - но есть некоторые дополнительные проблемы ...
Итак
- Я создал хранимую процедуру (как
sa
) для восстановления базы данных - Я создал «прокси-пользователя», у которого есть разрешения CREATE (на самом деле я создаю логин, потому что пользователь находится на уровне базы данных, и я не может предоставить
CREATE DB
разрешение) - В хранимой процедуре я использую
EXECUTE AS proxyUser
- Я предоставляю своему пользователю
EXECUTE
разрешение на хранимую процедуру
Пока все хорошо, но когда мой пользователь без прав выполняет хранимую процедуру, я получаю «пользователю не разрешено выдавать себя за proxy_user». Кажется логичным, хранимая процедура теперь выполняется в контексте моих пользователей.
Это я могу решить, предоставив безличные права моему пользователю без прав -> все работает, НО теперь в любое время мой пользователь без прав мог Скажите в SQL запросе «Выполнить как» и имеет все права другого пользователя, что недопустимо.
Что я пропускаю / делаю неправильно? Спасибо !!