2012-12-11 81 views
66

我收到以下错误SQL Server主体“DBO”不存在,

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网站的问题,但它会帮助,如果你提供有关出现错误时不能执行什么命令的详细信息,即。并且有大量的搜索结果为这个错误包括[这个问题](http://stackoverflow.com/questions/2723061/sql-server-2008-replication-failing-with-process-could-not-execute-sp- replcmds);你有没有看过他们,他们是否以任何方式符合你的情况和配置? – Pondlife

回答

107

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

use [YourDatabaseName] EXEC sp_changedbowner 'sa' 
+4

请参阅此处的详细文章:http://sqlserver-help.com/tag/cannot-execute-as-the-database-principal-because-the-principal/ – orberkov

+2

@hurleystylee,您的解决方案对我来说确实很好。我的数据库有一个老板顺便说一句。 –

+0

我有这个相同的问题。我试图通过@hurleystylee运行查询它执行,但它没有做任何事情。当我检查'dbo'时仍然是db_owner,我不能对DBO做任何事情。它变得非常令人沮丧。我无法改变一件事。 –

8

当数据库是从不同的SQL服务器或实例恢复,这可能也发生。在这种情况下,数据库中的安全主体'dbo'与恢复数据库的SQL服务器上的安全主体不同。 不要问我,我怎么知道这...

+0

我可以问你如何解决它?大声笑,这正是我想要做的。在不同服务器之间移动数据库图表,然后实施数据库。一旦我导入.bak文件并尝试打开图表文件夹时,我得到了此错误。 – gunslingor

+1

嘿,这工作对我来说:http://dba.stackexchange.com/questions/50690/error-on-changing-ownership-of-database-from-files-page-in-database-properties-d – ironstone13

+0

@ ironstone13没有为我工作。我收到了消息,我不能放弃dbo –

41

enter image description here

待办事项图形。

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

+0

再次回到这个答案来解决我的问题。 – teapeng

1

选择的答案和一些其他国家都好。我只想给出一个更纯粹的SQL解释。它涉及到相同的解决方案,没有(有效的)数据库所有者。

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

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

这表明dbo用户的SID在DB_NAME数据库和

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

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

因此,如果出现上述错误,将不会被以分配给数据库dbo用户的SID登录。

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

1

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