我得到以下错误

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的文章,但我不知道这发生在哪个数据库中。这个错误被频繁地抛出,并且错误日志以每天1GB的速度增长。


当前回答

我通过设置数据库所有者解决了这个问题。在此问题之前,我的数据库没有任何所有者。在数据库中执行此命令将所有者设置为sysadmin帐户:

use [YourDatabaseName] EXEC sp_changedbowner 'sa'

其他回答

在将数据库从SQL2016恢复到SQL2019之后,当我试图访问数据库图时遇到了同样的问题。我已经有正确的数据库所有者,但文件的所有者是空的。一旦我设置好了,它就正常工作了……

正如消息所说,您应该将权限设置为用户的所有者。所以你可以使用以下语句:

ALTER AUTHORIZATION 
ON DATABASE::[YourDBName]
TO [UserLogin];

希望有帮助! 如果你觉得合适,请留下评论。

当意外地将数据库连接字符串提供给只读镜像时也有此错误-而不是HA设置中的主数据库。

在Security下,将主体添加为“未登录的SQL用户”,使其拥有与主体同名的模式,然后在Membership中将其设置为db_owner。

另一种方法

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