Sql-Server

在 SQL Server 2008 中更改數據庫所有者;CLR 問題取決於使用的 方法?

  • July 27, 2009

我附加了一個數據庫並嘗試將所有者更改為有效的登錄名。

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

我通過使用以下語句解決了這個問題:EXEC sp_changedbowner ‘sa’; 更改數據庫所有者。

我的問題是,這兩種更改數據庫所有者的方法有什麼區別。它們是等價的嗎?我似乎很清楚 sp_changedbowner 正在做更多/更正的事情,而改變授權語句沒有做。


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

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

在您的列表中,我認為將數據庫設置為不可信,所以我假設您忘記了這一步:

ALTER DATABASE my_db_name SET TRUSTWORTHY ON;

但也許不是…

檢查這篇文章: http: //support.microsoft.com/kb/918040似乎他們確實建議使用 sp_changedbowner 而不是 ALTER AUTHORIZATION。但事實是,它做的事情完全相同(sp_changedbowner 在幕後呼叫 ALTER AUTHORIZATION)。不同之處在於它還刪除了 dbo 使用者的“別名”(無論如何不推薦使用的功能)加上強制數據庫的檢查點。最後一塊可能是你要找的。

引用自:https://serverfault.com/questions/40158