在同一网络上使用xp_cmdshell在其他服务器的磁盘上创建XML文件

时间:2011-11-11 05:34:11

标签: sql sql-server sqlcmd

我的网络上有两台服务器,一台用于RDBMS(Sql Server 2005),第二台是Web服务器(运行IIS 7.5)。

RDBMS服务器的本地IP 192.168.1.5 ,UNC名称 DataOne

Web服务器的本地IP 192.168.1.4 ,UNC名称 FirmWebOne

使用以下块,我可以运行查询并在C:上为RDBMS服务器机器创建一个xml文件。 它工作正常。

DECLARE @FileName VARCHAR(50)
DECLARE @SQLCmd   VARCHAR(500)

SELECT  @FileName = N'\\192.168.1.5\c$\trial_1.xml'

SELECT  @SQLCmd = 'bcp ' +
 '"SELECT I.code,L.name  ' +

' FROM Portal.dbo.inventory I LEFT JOIN Portal.dbo.inventoryLocalization L ON I.code = L.code AND L.language =''en'' ' +

' FOR XML PATH(''Product''), ROOT(''Products''), TYPE "' +

' queryout '  + @FileName +
' -w -T -S' + @@ServerName

SELECT @SQLCmd AS 'Command to execute'

EXECUTE master..xp_cmdshell @SQLCmd

我可以在Web服务器磁盘上创建该xml文件吗?

我已经厌倦了Web服务器的IP为N'\ 192.168.1.4 \ c $ \ trial_1.xml'

和Web服务器的UNC地址为N'\ FirmWebOne \ c $ \ trial_1.xml'

但它会返回以下错误。

SQLState = S1000,NativeError = 0 错误= [Microsoft] [SQL Native Client]无法打开BCP主机数据文件

有什么想法吗?

提前致谢...

PS:顺便说一下,我已经用EXECUTE master..xp_cmdshell'whoami.exe'检查了帐户 它返回 nt authority \ system ,此帐户拥有网络权限

1 个答案:

答案 0 :(得分:0)

NT Authority \ System 是本地用户,我猜你没有在 \ FirmWebOne \ c $ 上明确授予他权限。 我会通过设置proxy account来更改运行 xp_cmdshell 的帐户。然后,您可以在 \ FirmWebOne \ c $

上授予对此用户的访问权限 顺便说一句:我最好避免使用C $并创建一个共享文件夹。它更易于管理和安全。