2012-12-11 79 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];