Подтвердить что ты не робот

Принципал "dbo" SQL Server не существует,

Я получаю следующую ошибку

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 ГБ каждый день.

4b9b3361

Ответ 1

Я решил эту проблему, установив владельца базы данных. У моей базы данных не было владельца до этой проблемы. Выполните эту команду в своей базе данных, чтобы установить владельца для учетной записи sysadmin:

use [YourDatabaseName] EXEC sp_changedbowner 'sa'

Ответ 2

введите описание изображения здесь

Сделайте графически.

Щелкните правой кнопкой мыши → свойства → файлы → выберите владельца базы данных → выберите [sa] - ok

Ответ 4

Это также может произойти, когда база данных является восстановлением с другого SQL-сервера или экземпляра. В этом случае в базе данных главный защитник "dbo" отличается от принципала безопасности на сервере SQL, на котором была восстановлена ​​db. Не спрашивайте меня, как я знаю это...

Ответ 5

другой способ сделать это

ALTER AUTHORIZATION 
ON DATABASE::[DatabaseName]
TO [A Suitable Login];

Ответ 6

Выбранный ответ и некоторые другие хорошие. Я просто хочу дать более подробное объяснение SQL. Он приходит к тому же решению, что нет (действительного) владельца базы данных.

Аккаунт владельца базы данных dbo, который упоминается в ошибке, всегда создается с базой данных. Так что кажется странным, что он не существует, но вы можете проверить его двумя выборами (или одним, но пусть это будет проще).

SELECT [name],[sid] 
FROM [DB_NAME].[sys].[database_principals]
WHERE [name] = 'dbo'

который показывает SID пользователя dbo в базе данных DB_NAME и

SELECT [name],[sid] 
FROM [sys].[syslogins]

чтобы показать все логины (и их идентификаторы безопасности) для этого экземпляра SQL-сервера. Заметьте, что он не писал ни одного префикса db_name, потому что каждая база данных имеет ту же информацию в этом представлении.

Таким образом, в случае ошибки выше, не будет с SID, назначенным пользователю базы данных dbo.

Как объяснялось выше, обычно это происходит при восстановлении базы данных с другого компьютера (где базы данных и пользователя dbo были созданы с помощью другого входа). И вы можете исправить это, изменив права собственности на существующий логин.

Ответ 8

В разделе Безопасность добавьте принципала как "пользователя SQL без входа в систему", сделайте его владельцем схемы с тем же именем, что и принципал, а затем в членстве сделайте его db_owner.

Ответ 9

Также имелась ошибка при случайной подаче строки подключения к базе данных в зеркало только для чтения, а не в основную базу данных в настройке HA.