2009-07-07 102 views
15

我想運行xp_cmdshell(TSQL過程)以便裝入網絡驅動器,然後訪問遠程mdb文件。以特定用戶身份執行xp_cmdshell命令

我是MS SQL服務器上的管理員,我允許xp_cmdshell相應地執行。

然而,仍然有一個問題:

  • 當我打電話xp_cmdshell的,執行命令的用戶是SQL 系統管理員,即誰運行SQL Server進程的帳戶。

  • 我希望的xp_cmdshell執行作爲與我連接到SQL Server的帳戶,即管理員

論文的兩個賬戶都在管理員組,SQLAdmin組,並授予控制服務器。兩個用戶都屬於同一個域。所有這些都在同一臺機器上運行。

因爲這個矛盾的,我不能,因爲它被安裝用於系統管理員而不是管理員
使用的網絡驅動器,我試圖用以sp_ xp_ cmdshell_ proxy_佔指定與我想要的帳戶運行xp_cmdshell,但系統管理員仍然是使用的帳戶。

因此,此代碼:
select user_name(), suser_name;
exec xp_cmdshell 'echo %username%';

顯示:
Administrator Administrator
SysAdmin

有誰知道如何來冒充好了xp_cmdshell的命令?有什麼(重新)配置?

感謝您的幫助。

+0

代理帳戶時,非系統管理員用戶執行xp_cmdshell – 2009-07-07 14:01:26

+0

那麼我怎麼能強迫一個特定的系統管理員用戶只使用? – Antwan 2009-07-07 14:19:15

+0

只是爲了澄清 - 您已使用sp_xp_cmd_shell_proxy_account設置要使用的帳戶,然後使用xp_cmdshell執行該命令,並且使用的帳戶仍是服務帳戶?我只是想確保我理解你的步驟。 – SqlRyan 2009-07-28 03:19:29

回答

1

也許你可以試試PsExec?在此URL下載文件並將其複製到%Path%環境變量的文件夾成員中。

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

exec xp_cmdshell 'psexec -u Administrator -p password net use ...' 
+1

這可能是一個解決方案,但它意味着以純文本編寫密碼,這很棘手。 我正在尋找一種純粹的TSQL方式... – Antwan 2009-07-08 08:15:27

+0

你好,謝謝你的更新,但是當我用下面的命令「exec xp_cmdshell'C:\ Adhoc \ PSTools \ psexec -u domain \ id -p password dir \\ sharelocation'」時,它會一直運行,沒有任何結果建議 – 2015-05-29 14:51:58

0

你可以嘗試 「網絡使用」 裏面xp_cmdshell的用戶名和密碼。這將建立與UNC連接的憑證。

但是,我不確定這會持續多久。如果它無限期地持續下去(例如,直到服務器重新啓動),你可以有一個啓動存儲過程,它可以「淨使用」並確保它可以在以後使用。

隨後的xp_cmdshell(用於訪問MDB文件)不需要身份驗證,因爲憑據已在操作系統中建立。

+0

我幾乎慚愧地承認它,但這是有效的。從安全的角度來看這很糟糕,但是我是在絕望中完成的。但是 - 你是直接從網絡磁盤打開MDB文件嗎?那會讓我連夜不停。我正在做的是在沒有域名的環境下自行開發日誌傳送(即只是文件複製操作) – onupdatecascade 2009-07-23 02:08:34

7

由於您在sysadmin組中以登錄方式連接到SQL,因此xp_cmdshell作爲服務帳戶運行。

如果您作爲低特權登錄進行連接,則它將使用xp_cmdshell_proxy_account來代替。所以先嚐試做EXECUTE AS LOGIN='lowprivaccount',看看是否有幫助。

當然,你實際要求的不是預期的用途。預期的用途是高權限帳戶可以允許xp_cmdshell使用服務帳戶,而其他人必須忍受低權限代理帳戶。

3

其實我不得不在過去在網絡共享使用此方法類似的事情,試試這個...

- 映射驅動器,並使其持續。

xp_cmdshell的 「淨使用T:\\ <服務器> \ <份額> <密碼> /用戶:<名> /持久:是」

- T-SQL代碼利用的T驅動

- 刪除驅動器映射xp_cmdshell的「淨使用T:/刪除」

實際上你可以設置執行SQL時的作業服務啓動並使其映射此驅動器,所以只要sql正在運行,您將始終可以訪問該共享。您只需要設置一個存儲過程並映射驅動器,並使用sp_procoption(http://msdn.microsoft.com/en-us/library/ms181720.aspx

-2

您必須創建一個存儲過程,將xp_cmdshell腳本在裏面。

存儲過程運行使用管理員帳戶,因此您的xp_cmdshell將成功,當你執行存儲過程

create procedure RunShellIndirectly 

as 

declare @tawandachinaka as varchar(50) 

set @tawandachinaka='DIR "c:\scrap measurement\"*.csv /B' 

EXEC xp_cmdshell @tawandachinaka 
-1

重啓服務器後必須執行的命令plase解決方案保存命令運行...

Use Master GO 

EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
OVERRIDE GO 

EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GO 

exec xp_cmdshell 'net use \ip\xxx pass /user:xxx /persistent:no' 

Use Master GO 

EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
OVERRIDE GO 

EXEC master.dbo.sp_configure 'xp_cmdshell', 0 RECONFIGURE WITH OVERRIDE 
相關問題