我在网上找了些安全性方面的文章,提到要去除xp_cmdshell过程,这里我有几个疑问:
1  有的文章提到xp_cmdshell是使用xpsql70.dll这个文件的,但是我在我的数据库安装目录下面搜索,根本没有xpsql70.dll这个文件,这是为什么?然而我用sp_helpextendedproc 'xp_cmdshell'这个命令来查看的话,的确显示的是xpsql70.dll文件,那为什么我找不到呢?
2  跟上面对应的,有的文章又说xp_cmdshell是使用xplog70.dll这个文件的,这个文件我的确是在安装目录下面找到了,但是我在去除了xp_cmdshell过程后,即使把这个文件删除或者拷贝到其他分区备份,但是仍然可以用恢复命令来恢复这个过程,这是为什么呢?我用的恢复命令是:
exec sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
或者
sp_addextendedproc 'xp_cmdshell','xpsql70.dll'
都可以,我不知道为什么这2个DLL文件都可以恢复xp_cmdshell?即使在一个文件根本找不到,另一个文件被我删除的情况下

解决方案 »

  1.   

    -- 允许配置高级选项
    EXEC sp_configure 'show advanced options', 1
    GO
    -- 重新配置
    RECONFIGURE WITH OVERRIDE
    GO
    -- 启用xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    --重新配置
    RECONFIGURE WITH OVERRIDE
    GO--执行想要的xp_cmdshell语句
    Exec xp_cmdshell 'query user'
    GO--用完后,要记得将xp_cmdshell禁用(出于安全考虑)
    -- 允许配置高级选项
    EXEC sp_configure 'show advanced options', 1
    GO
    -- 重新配置
    RECONFIGURE WITH OVERRIDE
    GO
    -- 禁用xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 0
    GO
    --重新配置
    RECONFIGURE WITH OVERRIDE
    GO
      

  2.   

    2000中这个也适用吗?貌似只有2005中才这么disable它的
      

  3.   

    有些文件(程序)是可以自动生成的,举例如下:在A程序中,可以将B文件、C程序作为资源文件打包进A程序中,这时若B文件或C程序没有了,则从A程序中提取出来就可以了,所以不管你删不删除它都一样。还有些文件(或程序)是动态生成的,就是需要的时候才生成(是临时文件),是根本无法查找到它的文件名的
      

  4.   

    暂停sqlserver 后用regsvr32 xplog70.dll /u 反注册试试