2009-01-30 46 views
4

我試圖一個dll加載到MSSQL與:錯誤創建組件SQL時:MSG 33009

USE dbname 
GO 

CREATE ASSEMBLY foo 
FROM 'C:\foo\foo.dll' 
WITH PERMISSION_SET = UNSAFE 
GO 

而且我收到一條錯誤:

 
Msg 33009, Level 16, State 2, Line 2 
The database owner SID recorded in the master database differs from the database owner 
SID recorded in database 'dbname'. You should correct this situation by resetting the 
owner of database 'dbname' using the ALTER AUTHORIZATION statement. 

MSDN真並沒有告訴我有關錯誤的更多信息。

我看了所有在互聯網上,並走到那唯一的人曾經做過避免這種情況是這樣的結論:

use dbname 
go 
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false 

但正在改變業主真正避免這種情況的唯一途徑錯誤?爲什麼我必須這樣做,還有另一種方法嗎?在我進入並盲目地更換所有者之前,我想了解更多有關此錯誤的信息。

+0

是'dbname'從另一臺服務器上恢復的數據庫?如果是,那麼您必須將所有權重新分配給本地SA。 – StingyJack 2009-01-30 21:57:35

回答

3

我有完全相同的問題,唯一的解決辦法是改變主人,然後再改回來。

問題是用戶是每個數據庫和每個服務器。發生的事情是每個數據庫用戶的用戶名與每個服務器用戶的用戶名相同,但是他們的SID不匹配,所以它認爲它可能是不同的人。

1

你可能想要檢查的東西:如果你登錄爲(並正在創建數據庫爲)的用戶也映射到「模型」數據庫,那麼該用戶將在用戶選項卡下創建新的數據庫。這意味着在實例的安全性選項卡下有用於數據庫的本地用戶的憑據。要立即解決問題,請將用戶從本地數據庫中刪除 - 然後您可以將其設置爲所有者(來自實例憑據):

drop user [MyUser]; exec sp_changedbowner [MyUser]

要長期解決此問題,請將用戶從「模型」數據庫(安全/登錄/ [MyUser]屬性 - 用戶映射)取消映射。