對於我這種強迫症患者,服務賬號能用域賬號就不用本地的。微軟最佳實踐也是這麼建議的,於是我在安裝SCOM的時候就是按照下面這樣來規劃賬戶的。
用戶名 | 用途 | 權限級別 | 類型 | 隸屬於 |
OM數據訪問服務和配置服務帳戶 | 低權域用戶 | 用戶 | SQL本地管理員 | |
acertwp\svcomw | OM數據倉庫寫入賬戶 | 低權域用戶 | 用戶 | SQL本地管理員 |
acertwp\svcomr | OM報表查詢賬戶 | 低權域用戶 | 用戶 | SQL本地管理員 |
所以我在配置SCOM賬戶的時候是這樣子的:
那麼問題來了,爲毛我才裝好沒多久的SCOM就報警了呢,我還沒做啥壞事呢
警報描述如下:
The System Center Data Access service failed to register an SPN. A domain admin needs to add MSOMSdkSvc/SZSRVOM01v and MSOMSdkSvc/SZSRVOM01v.acertwp.com to the servicePrincipalName of CN=SZSRVOM01V,OU=Servers,DC=acertwp,DC=com
爲什麼會報錯呢,因爲我們每次重啓機器/服務的時候都會做一個動作,System Center Data Access Service這個服務會嘗試去找AD驗證這個服務的SPN在域裏面是否有註冊。但是在域裏面,一個低權限的Domain User是沒有權限去註冊SPN的,所以需要域管理員去做這件事情。
可是爲什麼還會報這個錯呢,我在安裝的時候用的賬號是域管理員啊,這裏其實是個BUG。而且這個BUG由來已久,已經伴隨了OM 2012 、OM2012 SP1和 OM2012 R2整整三代產品了。大家仔細看這個警報的描述,這是讓我用SZSRVOM01v這個計算機賬戶去註冊SPN,可是我明明是用acertwp\svcomda這個賬號去做服務賬號的,要註冊SPN也是爲acertwp\svcomda這個賬號註冊。
我們可以通過下面這個命令來獲取acertwp\svcomda這個賬戶註冊的SPN(把賬號替換成自己設置的賬號):
C:\Users\administrator.ACERTWP>setspn L acertwp\svcomda
輸出的內容應該是這個樣子的
Registered ServicePrincipalNames 用於 CN=SVCOMDA,OU=Service,OU=MIS,DC=acertwp,DC =com: MSOMSdkSvc/SZSRVOM01v.acertwp.com MSOMSdkSvc/SZSRVOM01v
但是我們實際可能看到輸出內容是這個樣子的
Registered ServicePrincipalNames 用於 CN=SVCOMDA,OU=Service,OU=MIS,DC=acertwp,DC =com:
這時候就需要我們手工來添加這個SPN了。
然後我們來看下SZSRVOM01v這個計算機賬戶的SPN:
C:\Users\administrator.ACERTWP>setspn -l SZSRVOM01v
輸出的內容是這樣子的
Registered ServicePrincipalNames 用於 CN=SZSRVOM01V,OU=Servers,DC=acertwp,DC=com: MSOMHSvc/SZSRVOM01v.acertwp.com MSOMHSvc/SZSRVOM01V WSMAN/SZSRVOM01v WSMAN/SZSRVOM01v.acertwp.com TERMSRV/SZSRVOM01V TERMSRV/SZSRVOM01v.acertwp.com RestrictedKrbHost/SZSRVOM01V HOST/SZSRVOM01V RestrictedKrbHost/SZSRVOM01v.acertwp.com HOST/SZSRVOM01v.acertwp.com
既然知道了來龍去脈,我們要怎麼修復這個問題呢?
首先我們得有一個域管理員的賬號,然後我們用這個賬號隨意登錄一臺域裏面的機器。打開CMD(管理員模式),執行以下兩條命令:
setspn –s MSOMSdkSvc/SZSRVOM01v.acertwp.com ACERTWP\svcomda setspn -s MSOMSdkSvc/SCOM01 ACERTWP\svcomda
再回到最初的命令,查詢acertwp\svcomda註冊的SPN:
setspn –L acertwp\svcomda
這時候的輸出就變成
Registered ServicePrincipalNames 用於CN=SVCOMDA,OU=Service,OU=MIS,DC=acertwp,DC =com: MSOMSdkSvc/SZSRVOM01v.acertwp.com MSOMSdkSvc/SZSRVOM01v
然後我們把警報關閉掉,不再報錯了。。。這個世界終於安靜了。