很奇怪的问题,xp_cmdshell命令失效,困惑很久,请大家帮忙

wangd1121 2011-12-26 05:51:41
-- 允许配置高级选项
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--重新配置
RECONFIGURE
GO

EXEC master.dbo.XP_CMDSHELL 'echo Hello World'

执行后一直直接返回NULL值。

xp_cmdshell命令已启用,不知是什么原因导致的?
...全文
390 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangd1121 2011-12-27
  • 打赏
  • 举报
回复
多谢ap0405140的关注。

我看了不是这个原因,一直是启用状态,结果直接返回NULL。

如果是禁用状态,结果是提示:
消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
唐诗三百首 2011-12-27
  • 打赏
  • 举报
回复
失效的情况下, 检查sp_configure 'xp_cmdshell'

结果是0还是1? 也可能是有程序在修改这个系统参数.
wangd1121 2011-12-27
  • 打赏
  • 举报
回复
顶起来,有人碰到过类似问题吗
-晴天 2011-12-27
  • 打赏
  • 举报
回复
你的问题的关键在于:
有时有用,有时没用!

这个要你自己检查了,什么时候有用,你做了什么以后有用,什么时候没用,你做了什么后没用,肯定是由于某个外部原因造成调用xp_shell失败的.

你可以到其他机器上去试试是否会出现类似的问题,正常的机器,应该不会有这种怪异的情况发生.
wangd1121 2011-12-27
  • 打赏
  • 举报
回复
上面的方法试过了,杀毒软件禁用了不管用。但是没有尝试卸载过杀毒软件。
wangd1121 2011-12-27
  • 打赏
  • 举报
回复
尝试过关杀毒软件了,不行。但是还没有尝试卸载杀毒软件。
唐诗三百首 2011-12-27
  • 打赏
  • 举报
回复
那个网站说是杀毒软件惹得祸,

建议暂时把服务器上的杀毒软件及防火墙关了再试试.
wangd1121 2011-12-26
  • 打赏
  • 举报
回复
各位大牛帮我看看啊,这问题困惑我3年多了,一直没有解决。

看了有人问过同样的问题,但我的不是这个原因,郁闷啊
http://social.msdn.microsoft.com/Forums/en/transactsql/thread/5c189d19-b9ef-4e01-a448-47fff2f7c836
快溜 2011-12-26
  • 打赏
  • 举报
回复
月底前结下帖子,谢谢
wangd1121 2011-12-26
  • 打赏
  • 举报
回复
多谢ssp2009和ap0405140提醒


EXEC master.dbo.xp_cmdshell 'echo Hello World'

上面是举个例子,实际是调用第三方命令行工具,和文件操作。
唐诗三百首 2011-12-26
  • 打赏
  • 举报
回复
或者 select 'Hello World' output
唐诗三百首 2011-12-26
  • 打赏
  • 举报
回复
其实我不太明白为何要用 XP_CMDSHELL 'echo Hello World',

实现同样的效果, 直接用 print 'Hello World' 不就ok了吗?
快溜 2011-12-26
  • 打赏
  • 举报
回复
你每次启用完cmdshell命名就关闭了,启用它对数据库并不安全
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--重新配置
RECONFIGURE
GO

EXEC master.dbo.xp_cmdshell 'echo Hello World'

EXEC sp_configure 'xp_cmdshell', 0
GO
--重新配置
RECONFIGURE
GO
EXEC sp_configure 'show advanced options', 0
GO
-- 重新配置
RECONFIGURE
GO
wangd1121 2011-12-26
  • 打赏
  • 举报
回复
SQL Server 2005 SP3 WINDOWS2003 R2
快溜 2011-12-26
  • 打赏
  • 举报
回复
我这里木有问题,你用的什么版本?。
wangd1121 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ssp2009 的回复:]

[/Quote]

已经启用,是运行一段时候后会失效。
wangd1121 2011-12-26
  • 打赏
  • 举报
回复
xp_cmdshell命令失效后的情况是直接返回NULL

EXEC master.dbo.XP_CMDSHELL 'dir c:'

EXEC master.dbo.xp_cmdshell 'echo Hello World'

/*比如上面2句的结果都是:
output
------------
NULL

(1 行受影响)
快溜 2011-12-26
  • 打赏
  • 举报
回复
快溜 2011-12-26
  • 打赏
  • 举报
回复
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--重新配置
RECONFIGURE
GO

EXEC master.dbo.xp_cmdshell 'echo Hello World'

/*
output
------------
Hello World
NULL

(2 行受影响)
wangd1121 2011-12-26
  • 打赏
  • 举报
回复
补充:
有时尝试重启数据库或重启服务器后,xp_cmdshell命令可以恢复,但运行一段时间后,突然又会失效,没有规律。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧