Sql-Server

什麼會導致孤立的##MS_PolicyEventProcessingLogin##?

  • November 28, 2019

今天早上我注意到我的 SQL 日誌充滿了以下消息:

啟動的過程'

$$ dbo $$.$$ sp_syspolicy_events_reader $$‘在隊列’msdb.dbo.syspolicy_event_queue’上執行輸出以下內容:

‘無法作為數據庫主體執行,因為主體“##MS_PolicyEventProcessingLogin##”不存在,無法模擬這種類型的主體,或者您沒有權限。

執行以下EXEC sp_change_users_login 'report'命令顯示該登錄實際上是孤立的。

我可以通過按照此 MSDN 文章中的建議執行以下命令來修復它。

EXEC sp_change_users_login 
   'Auto_Fix', '##MS_PolicyEventProcessingLogin##', 
   NULL, 'fakepassword'

但問題仍然存在:究竟是什麼導致這位校長成為孤兒?Google搜尋和研究表明其他人也有這個問題,但我還沒有找到原因描述。我知道在錯誤開始出現的那一刻沒有發生任何值得注意的事情。

去年夏天,我們將整個伺服器遷移到 SAN 儲存模型,在那次遷移期間我們恢復了所有內容(包括 msdb),但那是幾個月前的事了。只是最近才出現症狀,因為它在幾週前沒有出現在日誌中。

我們使用就地升級將兩台伺服器(從 SQL 2000)升級到 SQL 2008R2。升級後,我們開始在 SQL 日誌中收到這些消息。在升級過程中,我們沒有更改此登錄名或任何其他登錄名或使用者。

我的猜測是升級過程留下了兩個帳戶(##MS_PolicyEventProcessingLogin####MS_PolicyTsqlExecutionLogin##)孤立。

EXEC sp_change_users_login 'Auto_Fix', '<User Name>'修復了這個問題。

典型原因:有人放棄登錄(認為他們正在清理錯誤登錄)或恢復系統數據庫之一。

不過,事後很難猜測這是什麼。在使用者數據庫中,你可以通過事務日誌對其進行逆向工程,但你不能為 master 做日誌備份,所以你很不走運。

引用自:https://dba.stackexchange.com/questions/19968