У меня есть следующие настройки:
Существует БД SQL Server с несколькими таблицами, на которых установлены триггеры (которые собирают данные истории). Эти триггеры являются хранимыми процедурами CLR с EXECUTE AS 'HistoryUser'
. Пользователь HistoryUser
- это простой пользователь в базе данных без логина. У него достаточно прав для чтения из всех таблиц и записи в таблицу истории.
Когда я делаю резервную копию БД и затем восстанавливаю ее на другой машине (в данном случае это виртуальная машина, но это не имеет значения), триггеры больше не работают. Фактически, никакая персонализация для пользователя больше не работает. Даже простое утверждение, подобное этому
exec ('select 3') as user='HistoryUser'
выдает ошибку:
Невозможно выполнить роль участника базы данных, так как участник "HistoryUser" не существует, этот тип участника не может быть олицетворен или у вас нет разрешения.
Я прочитал в MSDN , что это может произойти, если владельцем БД является пользователь домена, но это не так. И даже если я изменю это на что-то другое (их рекомендуемое решение), эта проблема останется.
Если я создаю другого пользователя без логина, я могу использовать его для олицетворения просто отлично. То есть это работает просто отлично:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
Я не хочу воссоздавать все эти триггеры, так есть ли способ заставить работать существующий HistoryUser
?