Ssis

將 SSIS 包作為 SQL Server 代理作業執行的問題

  • December 14, 2021

嘗試在兩個 SQL Server 上執行 SSIS 包 SQL Server 代理作業時,我遇到了一些非常頑固的困難,一個在域中,一個在域中。我已經閱讀了數十個不同論壇上的數百篇文章,可惜無濟於事。應用我發現的修復和解決方案(例如使用代理)只會導致(稍微)不同的錯誤消息。從 Visual Studio 或直接從 SQL Server Management Studio 執行包時,它們按預期執行。

這是我到目前為止所得到的:

機器A

  • 被命名為APP-TEST-SERVER
  • 不在域中
  • 執行 SQL Server 2016
  • SQL Server Agent 由NT Service\SQLSERVERAGENT執行,在 SQL Server 中是 sysadmin
  • Integration Services 由NT Service\MsDtsServer130執行(不在 SQL Server 中,也無法添加)
  • 有一個名為ssis_proxy的代理,它是 SQL Server 正在執行的機器中的本地登錄名,並且是 SQL Server 中的 sysadmin(當然,暫時看看它是否是導致權限/登錄問題的那個)

執行其步驟作為SQL Server 代理服務帳戶執行的作業時,我收到以下錯誤消息:

以使用者身份執行:NT Service\SQLSERVERAGENT。適用於 32 位的 Microsoft (R) SQL Server 執行包實用程序版本 13.0.1601.5 版權所有 (C) 2016 Microsoft。版權所有。開始時間:下午 2:59:44 由於錯誤 0x80131904,無法執行 IS 伺服器包。伺服器:172.16.2.107,包路徑:\SSISDB\test\test sp run\Package.dtsx,環境參考 ID:6。描述:使用者“NT AUTHORITY\ANONYMOUS LOGON”登錄失敗。來源:.Net SqlClient 數據提供程序開始時間:下午 2:59:44 完成時間:下午 2:59:44 經過時間:0.171 秒。包執行失敗。步驟失敗。

什麼是NT AUTHORITY\ANONYMOUS LOGON廢話?它不應該使用 SQL Server 代理使用的 Windows 身份驗證(即 NT Service\SQLSERVERAGENT)嗎?怎麼可能是匿名的?難道是 MsDtsServer130 沒有被添加為 SQL Server 中的登錄導致這個問題嗎?在這種情況下我能做什麼?無法將 MsDtsServer130 添加為 SQL Server 中的登錄名。

當它以設置為代理ssis_proxy的 step run 執行時,我得到:

以使用者身份執行:APP-TEST-SERVER\ssis_proxy。適用於 32 位的 Microsoft (R) SQL Server 執行包實用程序版本 13.0.1601.5 版權所有 (C) 2016 Microsoft。版權所有。開始時間:下午 3:23:15 由於錯誤 0x80131904,無法執行 IS 伺服器包。伺服器:172.16.2.107,包路徑:\SSISDB\test\test sp run\Package.dtsx,環境參考 ID:6。描述:登錄失敗。登錄來自不受信任的域,不能用於 Windows 身份驗證。來源:.Net SqlClient 數據提供程序開始時間:下午 3:23:15 完成時間:下午 3:23:15 經過時間:0.172 秒。包執行失敗。步驟失敗。

為什麼提到不受信任的域:

  • 對於可以在 SQL Server Management Studio 中使用 Windows 身份驗證進行連接的登錄?
  • 在一台不在域中的機器上?

機器 B

  • 被命名為LINESRV03
  • 在域 LINEAR
  • 執行 SQL Server 2014
  • SQL Server 代理由NT AUTHORITY\NETWORKSERVICE執行並且是 sysadmin
  • 集成服務也由NT AUTHORITY\NETWORKSERVICE執行
  • 有一個名為busztv的代理,它是 LINEAR 中的域使用者,並且是 SQL Server 中的 sysadmin(當然,暫時看它是否是導致權限/登錄問題的那個)

執行其步驟作為SQL Server 代理服務帳戶執行的作業時,我收到以下錯誤消息:

以使用者身份執行:LINEAR\LINESRV03$。Microsoft (R) SQL Server 執行包實用程序版本 12.0.5000.0,適用於 32 位版權所有 (C) Microsoft Corporation。版權所有。開始時間:15:31:31 由於錯誤 0x80131904,無法執行 IS 伺服器包。伺服器:172.16.2.80,包路徑:\SSISDB\test\test sp run\Package.dtsx,環境參考 ID:10。描述:登錄失敗。登錄來自不受信任的域,不能用於 Windows 身份驗證。來源:.Net SqlClient 數據提供程序開始時間:15:31:31 完成時間:15:31:31 經過時間:0.328 秒。包執行失敗。步驟失敗。

同樣是這個不受信任的域。

我只是不知道誰在這裡不信任,Integration Services 或 SQL Server,但提供其他(非 ssis)作業執行並且代理自己執行它讓我瘦 SQL Server 可以使用NT AUTHORITY\NETWORKSERVICE及其根本無法克服它的集成服務。

當它以設置為代理busztv的 step run 執行時,我得到:

以使用者身份執行:LINEAR\busztv。Microsoft (R) SQL Server 執行包實用程序版本 12.0.5000.0,適用於 32 位版權所有 (C) Microsoft Corporation。版權所有。開始時間:15:33:25 由於錯誤 0x80131904,無法執行 IS 伺服器包。伺服器:172.16.2.80,包路徑:\SSISDB\test\test sp run\Package.dtsx,環境參考 ID:10。描述:登錄失敗。登錄來自不受信任的域,不能用於 Windows 身份驗證。來源:.Net SqlClient 數據提供程序開始時間:15:33:25 完成時間:15:33:26 經過時間:0.312 秒。包執行失敗。步驟失敗。

它似乎有一些嚴重的信任問題,它不信任自己。這個不受信任的域非常煩人,這個#@!% 邪惡地避免告訴它正在談論哪個登錄名和哪個域。

編輯: 兩台伺服器上的包是相同的,都只是試圖訪問機器集成服務上的 SQL Server 上的數據庫(即沒有訪問遠端伺服器,甚至沒有通過連結伺服器)和文件資源(刪除和複製一個 SQLite 數據庫文件,稍後通過 ODBC 訪問該文件)在同一台機器上。此外,代理還獲得了所需的所有必要權限(他們可以訪問數據庫和文件)。這些任務被從包中一一刪除,以查看它們是否是阻止作業執行的原因,直到那裡沒有任何東西。目前該任務不做任何事情,並且沒有剩餘的連接管理器。儘管如此,該作業仍然失敗,並顯示與以前相同的錯誤消息。

誰能解釋一下如何殺死這條龍?

你還有這個問題嗎?我沒有足夠的代表發表評論,但您是否嘗試在伺服器的系統資料庫中設置 disableloopback=1?“登錄來自不受信任的域,不能與 Windows 身份驗證一起使用”錯誤可能是由環回檢查失敗引起的。

您可能會遇到未在 SQL Server 實例上啟用 CLR 的問題。這可能會導致 SSIS 包出現問題。

使用以下命令檢查您的 CLR 設置:

sp_configure 'clr enabled'

如果config_valuerun_value返回0則 CLR 已被禁用。通過發出以下命令打開 CLR:

sp_configure 'clr enabled', 1
go
reconfigure
go

檢查該值是否已設置為:

sp_configure 'clr enabled'

如果config_value返回1run_value返回0則說明 CLR 已啟用,但尚未啟動。執行以下命令:

reconfigure
go

然後再次檢查。

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