上網查了一下發現可以用sp_reassign_dtspackageowner [@name =] 'name',[@id =] 'id',[@newloginname =] 'newloginname'來改變DTS的owner
我先請他自己建一個DTS看看顯示的owner是誰,owner是個網域帳號,我就以為我也應該把那個DTS的owner改成那個網域帳號,因為一直以來我發現雖然是用SQL帳號登入的,可是儲存後顯示卻都是網域帳號,我覺得這樣很正常,不過結果改了後還是不能儲存,錯誤依舊一樣
想說怪了,怎麼還是不行,我不死心,上網查了一些資料,有了一點線索,查看sysdtspackages會發現有owner與owner_sid這兩個欄位,owner明明已經是那個網域帳號啦,那可能問題出在owner_sid囉,會不會實際上儲存時是比對owner_sid而不是owner?
再查看sp_reassign_dtspackageowner 這個StoredProcedure的內容
UPDATE sysdtspackages SET owner_sid =owner與owner_sid都更新一致,那這個也沒問題
SUSER_SID(@newloginname), owner =
@newloginname WHERE id = @id
再查看sp_add_dtspackage 這個StoredProcedure的內容,發現儲存到sysdtspackages時,owner_sid與owner可能會不一致喔,而且真的是比對owner_sid,而不是owner,所以我看owner是不完全正確的,那問題很清楚啦
我再重新整理一下,因為環境有加入AD,SQL server上的User群組有加入Domain users,然後我同事平常是用SQL帳號連接的server的,假設是test,然後他登入AD用的是Domain\adalf好了,當他加入個DTS時,sp_add_dtspackage 會寫入一筆資料到sysdtspackages,其中owner是寫Domain\adalf,可是owner_sid卻是test的sid,這應該是有問題的,但是當下次要修改儲存時,會先比對owner_sid與目前使用的SUSER_SID(),都是test的sid,所以可以正常儲存
但若我們看的是owner有可能會被誤導,以為同事的owner是Domain\adalf,把另一個DTS的owner改成Domain\adalf,以方便我同事修改,當我們一但用sp_reassign_dtspackageowner 改掉後,owner_sid與owner都是一致的,也就是Domain\adalf,這是正確的,可是我們下次儲存DTS的時候,會判斷DTS的owner_sid與目前使用的SUSER_SID()是否相同,結果owner_sid是Domain\adalf的sid,可是SUSER_SID()卻是test的,所以我同事就不能儲存囉,所以用sp_reassign_dtspackageowner把DTS的owner改成test就沒問題了
0 意見:
張貼留言