0

我有一个执行 ftp 复制的 C# .Net 控制台应用程序从 cmd 命令提示符运行,但是当从 SQL 代理作业或 SQL 服务器管理工​​作室运行时,应用程序的 FTP 部分失败:

declare @cmd varchar(200)
select @cmd = 'c:\ftptest\test.exe';
exec master..xp_cmdshell @cmd ;

从命令提示符运行时,控制台应用程序会上传 FTP 文件,但在使用 SQL 路由时会引发异常:

System.Net.WebException: The remote server returned an error: (400) Bad Request.
at System.Net.FtpWebRequest.GetResponse()

这听起来像是权限问题,但同一用户在 SQL Server Management Studio 查询和命令提示符中运行控制台应用程序,并且两者都在同一台服务器上运行。

4

2 回答 2

1

首先,xp_cmdshell 应该在 SQL Server 服务帐户的安全上下文中运行。

考虑到这一点,如果您的服务 acc 没有足够的权限(可能 LocalService 甚至 NetworkService 都不会这样做),您的服务不应该运行。在 SQL Server 配置管理器中检查。

于 2013-10-30T12:40:33.343 回答
0

SSMS 使用的xp_cmdshell_proxy_account是 xp_cmdshell ,我设法通过控制台应用程序的 app.config 中的代理配置解决了这个问题:

<system.net>
   <defaultProxy
      enabled="false"
      useDefaultCredentials="false"
    />
</system.net>
于 2013-10-31T10:33:52.900 回答