INF:如何將 DTS 封裝當成排程的作業執行

文章翻譯 文章翻譯
文章編號: 269074 - 檢視此文章適用的產品。
本文曾發行於 CHT269074
全部展開 | 全部摺疊

在此頁中

結論

當您在使用「資料轉換服務」(Data Transformation Services,DTS) 封裝時,可能會經常遇到一個問題,那就是當 DTS 封裝從 SQL Server Enterprise Manager 執行時不會發生錯誤,但是把 DTS 封裝當成排程的作業執行時便會失敗。這個問題之所以發生,通常是因為將封裝當成排程的作業執行和以互動的方式執行時,兩者的安全性內容有所不同。

本文將告訴您,執行 DTS 封裝時所牽涉到的安全性問題。

其他相關資訊

本文使用的一些詞彙包括:
摺疊此表格展開此表格
詞彙說明
DTS資料轉換服務
SQL 驗證以 Microsoft SQL Server 登入和密碼為基礎的安全性系統。
標準安全性請參閱 SQL 驗證。
SQL Server 驗證請參閱 SQL 驗證。
Microsoft Windows NT 驗證當使用者透過 Microsoft Windows 使用者帳戶進行連線時,SQL Server 會在使用者登入執行 Microsoft Windows NT、Microsoft Windows 2000、Microsoft Windows 95 或 Microsoft Windows 98 的電腦時,確認帳戶名稱和密碼是經過驗證的。
整合式安全性請參閱 Microsoft Windows NT 驗證。
Windows NT 或 Microsoft Windows 2000 驗證請參閱 Microsoft Windows NT 驗證。
Microsoft Windows NT 帳戶或登入等於 Windows 登入或帳戶與 Microsoft Windows NT 登入帳戶或 Microsoft Windows 2000 登入帳戶相同。
SQL 代理程式SQL Server 代理程式服務
SEMSQL Server Enterprise Manager

DTS 封裝在哪裡執行?

DTS 封裝有一個經常被回報的問題,就是從 SQL Enterprise Manager 執行封裝時,和 DTS 封裝被排程為作業時的行為不同。當您從 SQL Enterprise Manager (SEM) 中的 DTS 設計師執行封裝時,封裝會在您使用的電腦上執行。如果您使用的是伺服器 (不論是實際位於伺服器,或透過遠端存取軟體),封裝便會在伺服器上執行。如果您使用的是工作站,而且您已經在 Enterprise Manager 中註冊 SQL Server 伺服器,則封裝會在工作站上執行。封裝的安全性內容是您用來登入該電腦的 Windows NT 帳戶的安全性內容。將封裝當成排程的工作來執行時,封裝一定會在伺服器上執行。

開發人員常常透過 Enterprise Manager 中的 DTS 設計師,在以互動的方式在他們的工作站上建立和測試 DTS 封裝。在對 DTS 封裝進行偵錯後,該封裝便會被排程為作業。這樣會將封裝的位置,從開發者的工作站變更為伺服器。如果封裝要將文字資料載入 SQL Server 的話,該封裝便會失敗,除非伺服器上有文字檔案和到該檔案的路徑。如果封裝連接到另一台伺服器,且作業的安全性內容不支援連線時,封裝也會失敗。

誰擁有執行 DTS 封裝的作業?

封裝的排程方法是建立一個由 SQL 代理程式服務所管理的作業。這項作業與其他任何的排程作業一樣,都有一個擁有者。擁有者可以是 SQL Server 登入或 Windows NT 帳戶。

如果要判斷擁有者:
  • 請在 Enterprise Manager 中按兩下該作業,然後查看 [擁有者] 下拉式清單方塊。

    - 或 -

  • 執行 msdb.dbo.sp_help_job 系統預存程序。
SQL Server 7.0

作業在哪一種安全性內容中執行,是由作業的擁有者決定。如果作業是由 Sysadmin 伺服器角色成員以外的登入所擁有,那麼封裝會在 SQLAgentCmdExec 帳戶的內容之下執行,並擁有該帳戶的權限。

如果要讓 SQLAgentCmdExec 能夠執行連接到 SQL Server 的作業,SQLAgentCmdExec 帳戶必須具有適當的 Windows/NT 權限,並且被授予具有適當資料庫權限的 SQL Server 登入存取。SQLAgentCmdExec 帳戶通常沒有本機 SQL Server 電腦以外的權限。因此,如果封裝被排程為某個登入所擁有的作業,但該登入並不是 Sysadmin 角色的成員,則任何必須連接到另一部電腦的封裝都會失敗。

SQL Server 2000

作業在哪一種安全性內容中執行,是由作業的擁有者決定。如果作業是由 Sysadmin 伺服器角色成員以外的登入所擁有,那麼封裝會在設定為 SQL 代理程式的 Proxy 帳號的內容之下執行,並且擁有該帳戶的權限。

如果要讓 SQL 代理程式 Proxy 能夠執行連接到 SQL Server 的作業,SQL 代理程式的 Proxy 帳戶必須具有適當的 Windows/NT 權限,而且被授予具有適當資料庫權限的 SQL Server 登入存取。對於執行 DTS 封裝的作業,SQL 代理程式的 Proxy 帳戶必須對 SQL Server 代理程式在其下執行的帳戶的暫時目錄,具有讀取和寫入的權限。例如:
c:\Documents and Settings\<Account>\Local Settings\Temp
如果該作業是由一個屬於 Sysadmin 角色成員的帳戶 (SQL Server 登入或 Windows NT 驗證登入) 所擁有,SQL 代理程式作業會在用來啟動 SQL 代理程式服務的帳戶內容之下執行。

此外,如果作業是由 Windows NT 網域帳戶所擁有,且如果封裝是儲存在 SQL Server 或 SQL Server 儲存機制 (不是儲存成檔案) 時,您必須使用來自相同網域的帳戶或受信任網域的帳戶來啟動 SQL Server 服務。例如,如果 SQL 代理程式作業是由 USA 網域的帳戶所擁有,用來啟動 SQL Server 服務的帳戶必須屬於 USA 網域或 USA 網域所信任的網域。如果 SQL Server 是使用本機帳戶來啟動,封裝就無法執行。

擁有者是由什麼決定的?

問題:當您用滑鼠右鍵按一下 DTS 封裝,並選擇排程封裝時,擁有者是如何指派的?

回答:SQL 代理程式作業的擁有者是根據 SQL Server 在 Enterprise Manager 中的註冊方式來決定。如果 SQL Server 使用 Windows NT 驗證註冊,排程作業的擁有者就是用於啟動 SQL 代理程式服務的帳戶。如果 SQL Server 使用 SQL Server 驗證 (例如,SA 登入) 在 SEM 中註冊,那麼工作的擁有者與 SQL Server 登入相同。

如果要變更封裝的擁有權:
  1. 在 Enterprise Manager 中按兩下該作業。
  2. 按一下 [一般] 索引標籤,然後按一下 [擁有者] 下拉式清單方塊。
您也可以使用 msdb.dbo.sp_update_job 系統預存程序變更封裝的擁有權。

DTS 封裝如何啟動?

如果您使用 DTSRun.exe 命令列公用程式手動執行封裝,安全性內容就是您用來登入電腦的 Windows 帳戶的安全性內容。如果您透過 xp_cmdshell 延伸預存程序,使用 DTSrun.exe 執行封裝,封裝會在用於啟動 SQL Server 服務的帳戶內容中執行,前提是執行 xp_cmdshell 的使用者是 Sysadmin 角色的成員。如果執行 xp_cmdshell 的使用者不是 Sysadmin 角色中的帳戶,那麼 DTSRun.exe 會在 SQLAgentCmdExec 帳戶的內容中執行。

如果 SQL Server 使用本機系統帳戶啟動,那麼 DTS 封裝就沒有執行 SQL Server 的電腦以外的權限。

如果 SQL Server 服務是在 Windows NT 帳戶之下啟動的,封裝的權限和該 Windows NT 帳戶相同。如果該 Windows NT 帳戶是本機電腦帳戶 (而不是網域帳戶),封裝就沒有該電腦外的任何權限。如果 Windows NT 帳戶是網域帳戶,封裝可能可以在該網域上存取許多不同電腦上的資源。

如何進行 Windows NT 驗證的連線?

有時 DTS 封裝會包含一個使用 Windows NT 驗證連線到資料來源的物件。這個連線所使用的安全性內容和正在執行的封裝的內容一樣。如果封裝使用 DTSRun.exe 從命令提示字元執行,就會使用目前登入的 Windows NT 帳戶的憑證。如果封裝是以 SQL Server 代理程式作業執行,那麼整合式安全性連線會以您用於啟動 SQL 代理程式的帳戶進行 (假設封裝的擁有者是 Sysadmin 角色的成員)。

常見問題

以下是您在 SQL 代理程式中,將 DTS 封裝當成排程作業執行時,可能遇到的一些其他常見問題:

對應的磁碟機

如果封裝依賴對應磁碟機代號所指定的檔案實體位置,那麼將封裝當成排程的 SQL 代理程式作業執行時,無論封裝的擁有者是誰,該封裝都可能會失敗。SQL 代理程式是 Windows NT 服務,而 Windows NT 服務看不到對應的磁碟機代號。對應是使用者設定檔的一部分,當使用者登入 Windows NT 工作階段時,便會載入此設定檔。服務無法和使用者設定檔一起使用。請使用 UNC 路徑,而不要使用對應磁碟機代號。 如需某項服務為什麼無法使用對應磁碟機的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
180362 INFO:Services and Redirected Drives

相對路徑

相對路徑 (或磁碟機代號) 是專用於封裝的目前位置 (例如 C:\)。如果封裝的設計是在工作站上進行,然後再排程時,執行該封裝的位置會變更。磁碟機代號路徑現在參考的是不同的實體位置,也就是伺服器的位置。除非參考的檔案也被移到伺服器上,否則該封裝的執行會失敗。

ActiveX Script 中的 COM 元件

如果在 ActiveX Script 中呼叫 COM 元件 (例如,Microsoft ActiveX Data Objects (ADO)、遠端資料物件 (RDO) 或決策支援物件 (DSO) 物件的呼叫),呼叫的元件必須位在執行 DTS 封裝的電腦上。如果是從 SEM 中的 DTS 設計師或 DTSRun.exe 執行封裝,元件必須是位在您使用的電腦上。如果封裝已經排程由 SQL 代理程式執行,那麼呼叫的元件必須載入至裝載 SQL Server 的電腦上。

封裝安全性

DTS 封裝可以擁有擁有者密碼和使用者密碼。這些密碼會影響誰可以編輯和執行封裝,但它們都不會影響封裝在其中執行的安全性內容。

SQLAgentCmdExec 使用權限

如果作業是在 SQLAgentCmdExec 帳戶的內容之下執行,而且 SQLAgentCmdExec 帳戶沒有 SQL Server 的登入權限,那麼作業可能會失敗,並出現下面的錯誤訊息:
DTSRun:Loading...DTSRun:Executing...DTSRun OnStart:DTSStep_DTSExecuteSQLTask_1 DTSRun OnError:DTSStep_DTSExecuteSQLTask_1, Error = -2147217843 (80040E4D) Error string:Login failed for user 'NT_name\SQLAgentCmdExec'.Error source:Microsoft OLE DB Provider for SQL Server Help file:Help context:0 Error Detail Records:Error:-2147217843 (80040E4D); Provider Error:18456 (4818) Error string:Login failed for user 'NT_name\SQLAgentCmdExec'.Error source:Microsoft OLE DB Provider for SQL Server Help file:Help context:0 DTSRun OnFinish:DTSStep_DTSExecuteSQLTask_1 DTSRun:Package execution complete.Process Exit Code 1. The step failed. (DTSRun:載入中...DTSRun:執行中...DTSRun OnStart:DTSStep_DTSExecuteSQLTask_1 DTSRun OnError:DTSStep_DTSExecuteSQLTask_1,錯誤 = -2147217843 (80040E4D) 錯誤字串:使用者 'NT_name\SQLAgentCmdExec' 登入失敗。錯誤來源:SQL Server 說明檔的 Microsoft OLE DB 提供者:說明內容:0 詳細的錯誤記錄:錯誤:-2147217843 (80040E4D);提供者錯誤:18456 (4818) 錯誤字串:使用者 'NT_name\SQLAgentCmdExec' 登入失敗。錯誤來源:SQL Server 說明檔的 Microsoft OLE DB 提供者:說明內容:0 DTSRun OnFinish:DTSStep_DTSExecuteSQLTask_1 DTSRun:封裝執行完成。處理序結束碼 1。步驟失敗。)
您必須授予 SQLAgentCmdExec 帳戶適當的 SQL Server 登入和資料庫權限。

屬性

文章編號: 269074 - 上次校閱: 2011年5月14日 - 版次: 4.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
關鍵字:?
kbsqldeveloper kbproductlink kbinfo KB269074
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com