【问题标题】:Calling xp_cmdshell from a Stored Procedure从存储过程调用 xp_cmdshell
【发布时间】:2012-10-09 13:01:37
【问题描述】:

作为概念证明,我们尝试将xp_cmdshell 命令插入到现有解决方案中。目前,一个应用程序在我们的数据库服务器上调用一个存储过程,在分析时看起来像这样:

   declare @P1 int
   set @P1=1
   exec Name_Of_The_SP @param1 = 3, @param2 = 'blah', @parametc = 'blahetc', @ID = P1 output
   select @P1

SP 本质上是打开一个事务,插入一行,然后提交。我们在其中添加了:

exec master..xp_cmdshell 'dir > c:\test.txt'

当我们在 SSMS 查询窗口中运行第一个代码块时,文件会按预期在服务器上生成。但是当我们使用应用程序调用它时,行会正常插入,但文件不会生成?

SQL Server 和 SQLAgent 用户是本地管理员和系统管理员,因此在那里看不到任何问题。尝试将应用程序用户也设置为本地管理员,但无济于事,它已经是系统管理员了。

这是 SQL Server 2000

【问题讨论】:

  • 对于迁移故障的选民,我认为他们不会非常欣赏这个问题,因为这并不是他们在常见问题解答中所说的“以专业身份管理计算机系统”。
  • SQL 2000 中有sp_xp_cmdshell_proxy_account 吗?
  • Podiluska,我希望这是作为 master 下的扩展程序吗?如果是这样,它不存在在那里。使用企业管理器,我确实确定了一个代理,使其成为系统管理员和本地管理员(纯粹作为测试),它仍然以问题中概述的方式执行。

标签: sql sql-server sql-server-2000 xp-cmdshell


【解决方案1】:

我们设法解决了这个问题 - 我们(我)在分析器中忽略了 exec 以不同的登录名进入。授予 master.dbo.xp_cmdshell 执行权限专门让它工作。向为此花费任何时间/精力的任何人道歉!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多