我得到以下错误

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的速度增长。


当前回答

进入属性-文件。 所有者名称必须为空。只要在用户名中输入“sa”,问题就会得到解决。

其他回答

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

另一种方法

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

进入属性-文件。 所有者名称必须为空。只要在用户名中输入“sa”,问题就会得到解决。

选择的答案和其他一些都很好。我只是想给出一个更纯粹的SQL解释。同样的解决方案是没有(有效的)数据库所有者。

错误中提到的数据库所有者帐户dbo总是用数据库创建的。所以看起来很奇怪,它不存在,但你可以检查两个选择(或一个,但让我们保持简单)。

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

显示DB_NAME数据库中dbo用户的SID和

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

以显示此SQL服务器实例的所有登录名(及其sid)。注意,它没有写任何db_name前缀,这是因为每个数据库在该视图中都有相同的信息。

因此,如果出现上述错误,将无法使用分配给数据库dbo用户的SID登录。

如上所述,这通常发生在从另一台计算机恢复数据库时(其中数据库和dbo用户是通过不同的登录创建的)。您可以通过更改现有登录名的所有权来修复它。

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

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

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