Я получаю следующую ошибку
Cannot execute as the database principal because the principal "dbo"
does not exist, this type of principal cannot be impersonated,
or you do not have permission.
Я читал об этом ALTER AUTHORIZATION
, но понятия не имею, в какой базе данных это происходит. Эта ошибка очень часто выплевывается и увеличивает журнал ошибок примерно на 1 ГБ каждый день.
Ответы:
Я решил эту проблему, установив владельца базы данных. У моей базы данных не было владельца до этой проблемы. Выполните эту команду в своей базе данных, чтобы установить владельца для учетной записи sysadmin:
источник
dbo
все еще был db_owner, и я ничего не могу сделать с DBO. Это действительно расстраивает. Я не могу ничего изменить.Делать графически.
База данных правой кнопкой мыши -> свойства -> файлы -> выбрать владельца базы данных -> выбрать [sa] - ок
источник
KB913423 - Нельзя запустить оператор или модуль, включающий предложение EXECUTE AS, после восстановления базы данных в SQL Server 2005
источник
Это также может произойти, когда база данных представляет собой восстановление с другого сервера или экземпляра SQL. В этом случае субъект безопасности 'dbo' в базе данных не совпадает с субъектом безопасности на сервере SQL, на котором была восстановлена база данных. Не спрашивайте меня, откуда я это знаю ...
источник
другой способ сделать это
источник
Выбранный ответ и некоторые другие все хорошо. Я просто хочу дать более чистое объяснение SQL. Это приходит к тому же решению, что нет (действительного) владельца базы данных.
Учетная запись владельца базы данных,
dbo
которая упоминается по ошибке, всегда создается вместе с базой данных. Поэтому кажется странным, что он не существует, но вы можете проверить с помощью двух выборок (или одного, но давайте будем проще).который показывает SID
dbo
пользователя в базе данных DB_NAME ипоказать все имена входа (и их SID) для этого экземпляра сервера SQL. Обратите внимание, что он не записывал префикс db_name, потому что каждая база данных имеет одинаковую информацию в этом представлении.
Таким образом, в случае ошибки выше не будет входа с SID, который назначен пользователю базы данных dbo.
Как объяснено выше, это обычно происходит при восстановлении базы данных с другого компьютера (где база данных и пользователь dbo были созданы с использованием другого имени входа). И вы можете это исправить, изменив владельца на существующий логин.
источник
Если вышеуказанное не работает, попробуйте следующее. Это решило проблему для меня, даже когда владелец был хорошо определен для базы данных.
Сбой репликации SQL Server 2008 с: процесс не может выполнить 'sp_replcmds'
источник
В разделе Безопасность добавьте принципала как «пользователя SQL без входа в систему», сделайте его владельцем схемы с тем же именем, что и принципал, а затем в членстве сделайте его db_owner.
источник
Также имелась ошибка при случайной подаче строки подключения к базе данных в зеркало только для чтения, а не в основную базу данных в настройке высокой доступности.
источник
Как говорится в сообщении, вы должны установить разрешение как владелец для вашего пользователя. Таким образом, вы можете использовать следующее:
Надеюсь полезно! Оставьте комментарий, если это нормально для вас.
источник
В моем случае я получил эту ошибку при попытке выдать себя за другого пользователя. Например
И поскольку база данных была импортирована из другой среды, некоторые из ее пользователей не соответствовали именам входа SQL Server.
Вы можете проверить, есть ли у вас такая же проблема, запустив (устарело) sp_change_users_login (в режиме «Отчет»), или использовать следующий запрос:
Если в этом списке показан пользователь, которого вы пытаетесь выдать, то, вероятно, вы можете исправить это, назначив пользователя БД для правильного входа в систему на вашем сервере. Например:
источник