摘要:讀者問題與解答 – DTS 排程於更改 sa 密碼之後,出現「使用者 'sa' 的登入失敗」錯誤訊息
問題
DTS的排程JOB,在SA密碼更改後,
DTS可以正常運行.
排程JOB出錯("SA登錄失敗").
重新設置DTS排程JOB,該JOB成功運行.
ps: job owner is sa.
DTS的job中, dtsrun後面一大段代碼代表甚麼?
會有認證信息(比如: sa密碼)嗎?
解答:
andrew 您好!
當您將 DTS 封裝(Package)並透過排程方式以利爾後執行時,SQL Server 7/2000會自動根據目前登入 Enterprise Manager 的使用者之帳號,使用 dtsrun.exe 這個公用程式,並在其後搭配一個波浪符號(~),緊接著是字元 Z(亦即:/~Z),且其後為加密過的十六進位文字(例如,0xA2B2...,這一段文字包含了 dtsrun.exe 於執行時,所需的參數,比方說,連線的 SQL Server 名稱、使用者帳號...等)之參數來執行封裝。這說明為什麼作業(Job)的擁有者是 sa,同時也解答了您的第二個問題。
於變更 sa 密碼之後,您可以依照實際環境與安全性考量,使用下列兩種方式之一:
r 在 Enterprise Manager 中,將 SQL Server 驗證方式改成「Windows 的帳戶驗證」模式,然後使用 Windows 帳號的使用者登入來重新建立作業。於此種情況下,自然就不能再使用 sa 這個帳號,如此一來,便可以免除再發生更改密碼導致執行作業失敗的問題。
r 若您不能更改驗證模式,請修改作業的設定:
1. 在欲修改的作業名稱上,按一下滑鼠右鍵選擇「內容」指令。
2. 按一下「步驟」索引標籤,用滑鼠左鍵選取欲修改的步驟所在列,接著按下「編輯」按鈕。
3. 於「一般」索引標籤中的「命令」文字方塊中,請鍵入欲執行 dtsrun.exe的其他 Windows 帳號之使用者來執行封裝。基本的 dtsrun 參數如下所示:
dtsrun /S<伺服器名稱> /U<使用者帳號> /P<密碼> /N<封裝名稱>
欲使用此種方式,您當然可以指定要以 sa 來執行封裝(如圖表 1 所示),只是日後更改 sa 密碼之後,還是會遇到「使用者 'sa' 的登入失敗」錯誤訊息。
圖表 1
附註:
1. 關於 dtsrun.exe 詳細的參數說明,請自行參考「線上叢書」。
2. 如欲於 dtsrun.exe 之後使用加密過的十六進位文字參數,請在「命令提示字元」下,鍵入如下所示的指令(如圖表 2 所示):
dtsrun /S<伺服器名稱> /U<使用者帳號> /P<密碼> /N<封裝名稱> /!Y /!C
接著在「命令」文字方塊中,按下滑鼠右鍵選擇「貼上」指令,然後刪除 /!Y /!C 這幾個字元。
3. 其實您也可以在「命令提示字元」中,使用 dtsrunui.exe 這個圖形化介面工具來執行封裝並建立排程。
圖表 2