xp_sqlagent_enum_jobs無執行權限

xp_sqlagent_enum_jobs無執行權限

去年因Server要汰換硬體,所以採用先建後拆在新機器上重建SQL server,然後將舊機器上的msdb 及user DB從restore到新機器。

結果之後非sysadmin的使用者在操作SQL Agent時皆會出現權限問題。

clip_image002

後來發現是因為##MS_AgentSigningCertificate##這個certificiate在Master及MSDB裡的SID不一致….

http://support.microsoft.com/kb/2000274#top

clip_image004

解法是在Master裡再建立一個certificate,讓SID與MSDB裡的##MS_AgentSigningCertificate##相同

--將msdb裡的certificate備成file

use msdb

go

BACKUP CERTIFICATE [##MS_AgentSigningCertificate##]

TO FILE = 'C:\temp\MS_AgentSigningCertificate.remote_server.cer'

go

--利用剛剛備出來的file在master裡再建立一個certificate

use master

go

CREATE CERTIFICATE [MS_AgentSigningCertificate.remote_server]

FROM FILE = 'C:\temp\MS_AgentSigningCertificate.remote_server.cer'

go

--建立user並給予權限

CREATE USER [MS_AgentSigningCertificate.remote_server]

FROM CERTIFICATE [MS_AgentSigningCertificate.remote_server]

go

GRANT EXECUTE TO [MS_AgentSigningCertificate.remote_server]

go

只要Master裡有一certificate跟Msdb裡的##MS_AgentSigningCertificate##具有相同的SID,錯誤就不會再發生了。

clip_image006

但是還不清楚MS_AgentSigningCertificate跟SQL agent之間是如何溝通 >”<