在 SQL Server 2008 中變更資料庫擁有者; CLR 問題取決於所使用的方法?

在 SQL Server 2008 中變更資料庫擁有者; CLR 問題取決於所使用的方法?

我附加了一個資料庫並嘗試將所有者更改為有效的登入名稱。

我使用了語句:ALTER AUTHORIZATION ON database::my_db_name TO“sa”。資料庫屬性顯示新擁有者是“sa”,但是我仍然收到不受限制的 CLR 組件(0x80FC80F1、0x8013150A)的權限錯誤,這與組件信任問題有關。

我透過使用以下語句解決了這個問題: EXEC sp_changedbowner 'sa';更改資料庫擁有者。

我的問題是,這兩種更改資料庫擁有者的方法有什麼區別。它們相等嗎?對我來說,很明顯 sp_changedbowner 正在做一些更/正確的事情,而 alterauthorization 語句沒有做。


如果您有興趣...在使用 sp_changedbowner 修復問題之前,我嘗試過:

  • 將資料庫的可信任屬性設為ON;事實上,我這樣做過幾次;我知道需要運行不受限制、未簽名的自訂 CLR 程序集
  • 將每個 CLR 組件的擁有者變更為 dbo,因為所有者是空白的,但顯然 dbo 已經是所有者,並且它在 SSMS 中始終為空白。
  • 將每個 CLR 組件的擁有者變更為其他內容,但這不起作用,因為具有依賴組件的組件似乎總是需要相同的擁有者;但不可能透過提供的介面同時更改兩者的所有者。
  • 調用 GRANT UNSAFE ASSEMBLY 到 [sa];顯然,您無法向該內建帳戶以及其他一些帳戶授予權限;他們已經獲得許可
  • 呼叫 GRANT UNSAFE ASSEMBLY to [NT AUTHORITY\NETWORK SERVICE] (程式集中的帳戶呼叫方法);沒有錯誤,但似乎沒有實現任何目標(也許更改了錯誤號碼?但訊息從未改變)。
  • ……可能還有一些我不記得的事。

答案1

在您的清單中,我沒有看到將資料庫設定為值得信賴的,因此我假設您忘記了此步驟:

ALTER DATABASE my_db_name SET TRUSTWORTHY ON;

但也許不是...

檢查這篇文章:http://support.microsoft.com/kb/918040看來他們確實建議使用 sp_changedbowner 而不是 ALTER AUTHORIZATION。但事實是,它執行完全相同的操作(sp_changedbowner 在幕後呼叫 ALTER AUTHORIZATION)。不同之處在於,它還刪除了 dbo 用戶的「別名」(無論如何已棄用的功能)並強制設定資料庫檢查點。最後一件作品可能就是您正在尋找的作品。

答案2

我相信ALTER_AUTHORIZATION並且sp_changedbowner都可以更改資料庫物件的所有權。當然,這些命令之間的差異在於ALTER_AUTHORIZATION可以更改其他內容(例如表的所有權),而sp_changedbowner僅用於更改資料庫的擁有者。

不過,您指出的行為聽起來很奇怪。你能複製它嗎?

相關內容