xp_CmdShell,只将映像写入托管SQL Server的位置。不是我想要的服务器(位置)

时间:2015-11-27 12:31:03

标签: sql sql-server sql-server-2008

我在sp中使用xp_CmdShell将图像写入C:\ ImageUpload这样的位置。这在托管SQL Server的服务器位置上工作得非常好。我知道这可能是典型的行为。

然而,我的一个客户是拥有自己的托管数据库的服务器。他需要在另一个服务器位置写入图像。

以下是我的SQL sp的一部分。它通常工作正常,但在上面的情况下,我想将图像写入另一个服务器位置。

SET @strOutputFilePath = C:/ImageUpload

-- Get Final Path
SET   @strOutputFilePath = @strOutputFilePath + @strFilename
PRINT @strOutputFilePath -- path will be like C:\ImageUpload\NameofFile
SET   @strSql = 'BCP "set fmtonly off SELECT BlobImage FROM dbo.TblImage where ID = ' + CAST(@id AS VARCHAR(10)) +''
                    + '" QUERYOUT ' + '"' +@strOutputFilePath+ '"' + ' -T -f C:\Test\testblob.fmt -S"' + @@SERVERNAME + '"'
PRINT @strSql  
EXEC  @RC = master.dbo.xp_CmdShell @strSql
PRINT @RC

如何指定特定的服务器位置,以便可以将图像写入该文件夹而不是托管SQL Server的文件夹?

1 个答案:

答案 0 :(得分:0)

你需要做一些事情。

  1. 更新服务器以使用UNC路径。所以对位置的引用 应该读取\\ ServerName \ FileShare \ File.txt而不是 驱动:\目录\ FILE.TXT

  2. 如果SQL Server安装正确且安全,则该帐户 xp_cmdshell使用可能没有权限。所以要么允许 服务帐户对共享文件夹的权限OR(更多 安全方法)为xp_cmdshell设置PROXY帐户。您可以通过发出命令whoami

  3. 找到xp_cmdshell使用的帐户