【问题标题】:Executing exe file in xp_cmdshell doesn't work在 xp_cmdshell 中执行 exe 文件不起作用
【发布时间】:2018-07-31 08:53:23
【问题描述】:

我在 SQL Server 中创建了一个用户:

CREATE LOGIN adminuser WITH PASSWORD = 'ABCDegf123';
GO

EXEC master..sp_addsrvrolemember @loginame = N'adminuser', @rolename = N'sysadmin'
GO

然后我与这个用户建立了联系。

我想做的是触发这个ftp命令:

ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt

所以我创建了一个触发器:

CREATE TRIGGER sss14
ON Table_1
AFTER INSERT
AS 
    DECLARE @CMDSQL VARCHAR(1000)
    SET @CMDSQL = 'ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt'
    EXEC master..xp_cmdshell @CMDSQL

但是,这不起作用。

请注意,使用xp_cmdshell 创建文件夹可以正常工作。当我运行“代码”时,它会将 Visual Studio 代码作为后台进程启动

【问题讨论】:

  • 你的错误是?
  • 我是 ms sql 的新手,你能告诉我什么时候能找到错误,
  • 正确在结果或消息下
  • 它告诉我 cmd 的执行成功,但是如果我启动 Visual Studio 代码,例如:SET @CMDSQL = 'code' 它不会启动
  • 在触发器中使用xp_cmdshell 来执行FTP 是一个非常糟糕的主意- 难以排除故障、难以维护、性能糟糕、不能很好地处理并发。考虑从客户端代码执行此操作。使用触发器在 Service Broker 队列中写入条目,以及从该队列读取请求并在必要时调用 FTP 的单独应用程序或服务。或使用作业或计划任务。

标签: sql-server xp-cmdshell


【解决方案1】:

调用 xp_cmdshell 时,SQL Server 不关心输出,也不考虑任何故障。 但是,您可以将输出插入临时表并查看结果。请在 SSMS 中运行以下命令进行检查。

DECLARE @CMDSQL VARCHAR(1000)
    SET @CMDSQL = 'ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt'
    create table #output(output varchar(2000)) 

    insert into  #output
    Exec master..xp_cmdshell @CMDSQL

    select * from #output 
    drop table #output 

使用 xp_cmdshell 运行的命令使用 SQL Server 服务帐户来运行操作系统命令。请检查 SQL Server 服务帐户是否已获得执行 ftp 的权限。如果没有,请授予适当的权限。

【讨论】:

  • thnks,对于我使用 SSMS 的响应,我如何查看表格输出?
  • 不推荐从SELECT 中的触发器返回数据。虽然现在可以使用,但在 SQL Server 的未来版本中将无法使用。
  • 我正在使用新版本的ms sql,这可能是我看不到任何结果的原因
  • 我修改了答案。请以相同的登录名在 SSMS 中运行以了解结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
相关资源
最近更新 更多