crm2011 自定義報表問題

   環境以及故障: 
  最近在處理crm2011自定義報表的時候碰到一個問題.通過crm2011的report winzard 創建報表,運行時出錯.
    在crm服務器端可以看到關於mscrmreporting serivce 的報錯.如下:
Report render failure. Error: An error has occurred during report processing. (rsProcessingAborted)
 
   在數據庫服務器端的***s 日誌中發現如下內容:
Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Query execution failed for dataset 'DSMain'. ---> System.Runtime.InteropServices.COMException (0x80040216):
System.ServiceModel.Security.SecurityNegotiationException: A call to SSPI failed, see inner exception.
System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception.
System.ComponentModel.Win32Exception: The target principal name is incorrect.
       這套環境是建立在hyper-v的虛擬機基礎上,app 和DB各佔一臺機器.APP服務器名爲:CRMAPP.test.com  DB名爲CRMDB.test.com 軟件環境爲windows server 2008R2 + crm 2011 + sql2008R2. 主要軟件安裝完畢後,在DB端安裝***s ,以及crm report extension (以前版本較報表連接器). 除了開始提到的自定義報表外,所有的功能運行都正常.
   分析以及排錯:  
   在上面的log中提到The target principal name is incorrect. 首先想到的就是SPN問題.
這裏涉及到的服務有sql和http. crm的服務賬號是test\crmsvc  ,sql的服務賬號是test\sqlsvc,這兩個賬號都是普通的域賬號.首先確認spn的註冊情況.
    setspn -L test\crmsvc
    setspn-L test\sqlsvc
並未發現相關的spn記錄.
   於是手動註冊SPN.
CRM服務:    
 setspn -A http/crmapp:5555 test\crmsvc  (在crm的web站點在安裝的時候定義的端 口爲5555)
  setspn -A http/crmapp.test.local:5555 test\crmsvc
 
SQL:
    setspn -A MSSQLSvc/crmdb:1433 test\sqlsvc
    setspn -A MSSQLSvc/crmdb.test.local:1433 test\sqlsvc
重起相關服務後,故障依舊.
    在服務器端查日誌. 在sql的啓動日誌中發現 錯誤:
The SQL Network Interface library was unable to register SPN. Error: 0x54b
   但是通過spn -l 確認,的確有對應的spn.何解?
   在sql service啓動的時候,會自動以服務賬號註冊spn.當服務賬號權限過低時,註冊失敗.
   參照 kb http://support.microsoft.com/kb/811889 ,修改服務賬號的權限,再重啓服務器,發現sql啓動日誌中註冊spn成功.(更多關於信息http://blogs.msdn.com/b/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx)
     再次測試報表,居然毫無起色.查看***s的日誌,毫無頭緒.
     最後在DB服務器本機訪問自定義報表 http://crmdb/reports   ,打開對應的報表,輸入登錄信息後,得到的錯誤提示和***s log中是一致的.(特別注意,這裏填入的用戶信息並不是用戶名.而是用戶的GUID 信息,http://support.microsoft.com/kb/2006869)
     自定義報表的數據源是MSCRM_FETCHdatasource  , 這裏難道會有一個從crm再獲取某些數據的操作?這裏我也確定不了.
     在DB服務器裝一個抓包工具wireshark(其他的也行). 發現在操作的過程中有個要求查詢 crmapp.test.local 的spn的過程. 因爲crm的站點綁定在5555的端口,並且手動設置的crm相關的spn也都帶上了5555的端口號.並沒有crmapp.test.local的spn信息.
     試着註冊了setspn -A http/crmapp.tset.local test\crmsvc
                           setspn -A http/crmapp test\crmsvc
 重啓sql ,***s 以及crm端的iis後. 問題居然搞定!
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章