天天看點

Cannot execute as the database principal because the principal "guest" does not exist, this type of principal cannot be impersonated, or you do not ha

原文: Cannot execute as the database principal because the principal "guest" does not exist, this type of principal cannot be impersonated, or you do not have permission. 今天遇到這樣一個問題:一個系統的作業需要給系統Support人員開放SQL Agent下作業的檢視、執行權限。資料庫版本為SQL Server 2014 SP2,給這個系統Support人員的NT賬号授予msdb資料庫下面權限後: http://images2015.cnblogs.com/blog/73542/201610/73542-20161017115051279-896329235.png 該系統Support人員回報在輕按兩下檢視該作業時報下面錯誤。于是我測試,驗證了一下這個權限是否OK, http://images2015.cnblogs.com/blog/73542/201610/73542-20161017115052748-524504302.png 我測試的時候使用的是Microsoft SQL Server Management Sutdio 2014,發現不會出現這個錯誤。 後面我又繼續測試了一下Microsoft SQL Server Management Sutdio 2008,發現使用這個版本确實會出現這個錯誤,Microsoft SQL Server Management Sutdio 2008版本如下所示: http://images2015.cnblogs.com/blog/73542/201610/73542-20161017115053795-301129870.png 于是我用SQL Profile跟蹤了一下,輕按兩下作業操作時執行的SQL語句,如下所示 http://images2015.cnblogs.com/blog/73542/201610/73542-20161017115055529-177356569.png 在執行下面SQL時,出現錯誤,可以将該SQL取出,在Microsoft SQL Server Management Sutdio 裡面執行。

exec master.dbo.sp_MSdbuserpriv N'serv'      
http://images2015.cnblogs.com/blog/73542/201610/73542-20161017115056998-2060588626.png

解決這個問題也很簡單,隻需要給這個NT賬号,授予master資料庫下面的public角色即可解決問題。