SQL Server主体“ dbo”不存在,


192

我收到以下错误

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。


1
对于DBA站点,这可能是一个问题,但是如果您提供有关错误何时出现的更多信息(即无法执行什么命令),则可能会有所帮助。对于这个错误,有很多搜索结果,包括这个问题 ; 您是否看过它们,它们是否与您的情况和配置相匹配?
Pondlife

Answers:


407

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

use [YourDatabaseName] EXEC sp_changedbowner 'sa'

6
在这里看到详细的文章:sqlserver-help.com/tag/...
orberkov

8
@hurleystylee,您的解决方案实际上对我来说效果很好。我的数据库有一个所有者。
Keyvan Sadralodabai

我遇到同样的问题。我试图通过@hurleystylee运行查询,但该查询没有执行任何操作。当我dbo仍然检查db_owner时,我无法对DBO做任何事情。真令人沮丧。我不能改变任何事情。
威里穆·穆里吉

@hurleystylee,请考虑编辑和补充答案,以便人们不必查看注释即可了解命令语法。
尤利西斯·阿尔维斯

2
@hurleystylee是的,我知道他做到了。我认为这样一来,答案就更加完整了。
尤利西斯·阿尔维斯

110

在此处输入图片说明

以图形方式进行。

数据库右键单击->属性->文件->选择数据库所有者->选择[sa]-确定


再次参考此答案,解决了我的问题。
teapeng

搞定了!谢谢!
alejandrob

我们从差异SQL实例还原了数据库。我遵循了这一步骤,它成功了..谢谢!
dotnetavalanche


11

当数据库是从其他SQL Server或实例还原时,也可能发生这种情况。在这种情况下,数据库中的安全主体“ dbo”与还原了数据库的SQL Server上的安全主体不同。不要问我我怎么知道的...


请问如何解决?大声笑,这正是我想要做的。在不同服务器之间移动数据库图,然后实现数据库。导入.bak文件并尝试打开diagrams文件夹后,出现此错误。
gunslingor

1
嘿,这个工作对我来说:dba.stackexchange.com/questions/50690/...
ironstone13

@ ironstone13对我不起作用。我得到的消息,我无法删除DBO
Wairimu Murigi

8

另一种方式

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

6

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

dbo错误提及的数据库所有者帐户始终与数据库一起创建。因此,它似乎不存在似乎很奇怪,但是您可以选择两个选择(或选择一个,但让我们保持简单)。

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

显示dboDB_NAME数据库中用户的SID,以及

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

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

因此,如果发生上述错误,将不会使用分配给数据库dbo用户的SID登录。

如上所述,从另一台计算机还原数据库(数据库和dbo用户由不同的登录名创建)时,通常会发生这种情况。您可以通过将所有权更改为现有登录名来修复它。



0

在“安全性”下,将主体添加为“无需登录的SQL用户”,使其拥有与主体相同名称的架构,然后在“成员资格”中将其命名为db_owner。


这在SSMS 2017上没有做任何事情
Zimano

0

当不小心将数据库连接字符串馈送到只读镜像时(而非HA设置中的主数据库),也会出现此错误。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.