xp_cmdshell作为sql Server的扩展存储过程之一,也是sql Server在安全大敌,很多sql安全手册上都要求关闭此过程,这不利用其特性简要实现了一个在sql服务器之间传取文件的功能,在sql2005下测试通过,现贴出代码下,大家共赏之

/*

* 脚本:通过sqlServer的xp_cmdshell在服务器之间传送文件

通过sql sqlServer实现,要求支持远程访问,并且均开启xp_cmdshell选项

* 作者: qin

* 整理: 2013.07.07 13:20

*

* E-Mail:QinGang@sina.com

* QQ:45958462

*/

/*

--开启高级选项

EXEC sp_configure 'show Advanced options','1'

RECONFIGURE

EXEC sp_configure 'xp_cmdshell',1

RECONFIGURE WITH OVERRIDE

*/

set nocount on;

--参数

declare @FromInstrance nvarchar(100),@FromDB nvarchar(100),@FromPWD nvarchar(100);

declare @ToInstrance nvarchar(100),@ToDB nvarchar(100),@ToPWD nvarchar(100);

declare @sql nvarchar(max),@cmd nvarchar(4000);

declare @file_table nvarchar(100);

declare @upfile_path varchar(100),@newfile_path varchar(100),@downfile_name varchar(100);

declare @error_flag int;

set nocount on;

--修改参数值

--文件名

set @upfile_path='D:\Data_bak\test.bak';--上传文件名

set @newfile_path=@upfile_path;--预留

set @downfile_name='D:\Data_bak\test3.bak';--下载后文件名

--源服务器

set @FromInstrance = '192.168.80.1';

set @FromPWD = '123asd';

set @FromDB = 'tempdb';

--目标服务器

set @ToInstrance = '192.168.80.130';

set @ToPWD = '123asd';

set @ToDB = 'tempdb';

--正式执行,不要修改

set @file_table='[tmp_file_'+cast(RAND()*1000000 AS VARCHAR)+']';

print 'select *,datalength(sText) file_len from tempdb.dbo.'+@file_table;

--上传

--1、生成upload.sql脚本(删除表+上传)

set @sql='if object_id(''tempdb..'+@file_table+''') is null

create table tempdb..'+@file_table+'(id int,sText nvarchar(max));

truncate table tempdb..'+@file_table+';

insert into tempdb..'+@file_table+'(id)values(1);

update tempdb..'+@file_table+' set sText=(select BULKColumn FROM OPENROWSET(BULK N'''+@newfile_path+''',SINGLE_BLOB) AS Data) where id=1;';

--print @sql;

--2、在本地释放文件upload.sql

if object_id('tempdb.dbo.tmp_table') is not null

drop table tempdb.dbo.tmp_table;

select cast(@sql as nvarchar(max))as sText into tempdb.dbo.tmp_table;

exec master..xp_cmdshell 'bcp tempdb.dbo.tmp_table out "c:\upload.sql" -T -t"|" -w -q',no_output;

--select * from tempdb.dbo.tmp_table

--3、连接源端执行upload.sql,文件放在源端tempdb库

set @cmd='osql -S '+@FromInstrance+' -U sa -P '+@FromPWD+' /d '+@FromDB+' /i c:\upload.sql';

--print (@cmd);

exec master..xp_cmdshell @cmd,no_output;

--下载

--1、创建download.sql脚本

set @sql='exec master..xp_cmdshell ''bcp "select sText from tempdb.dbo.'+@file_table+' where ID = 1" queryout "'+@downfile_name+'" -N -q -S"'+@FromInstrance+'" -U"sa" -P"'+@FromPWD+'" '''

--print @cmd;

--2、在本地释放文件download.sql

if object_id('tempdb.dbo.tmp_table') is not null

drop table tempdb.dbo.tmp_table;

select cast(@sql as nvarchar(max))as sText into tempdb.dbo.tmp_table;

exec master..xp_cmdshell 'bcp tempdb.dbo.tmp_table out "c:\download.sql" -T -t"|" -w -q',no_output;

--select * from tempdb.dbo.tmp_table

--3、连接源端执行upload.sql,文件放在源端tempdb库

set @cmd='osql -S '+@ToInstrance+' -U sa -P '+@ToPWD+' /d '+@ToDB+' /i c:\download.sql';

--print (@cmd);

exec master..xp_cmdshell @cmd,no_output;

--恢复现场:删除源端临时表

--1、生成upload.sql脚本(删除表)

set @sql='if object_id(''tempdb..'+@file_table+''') is not null

drop table tempdb..'+@file_table+';';

--print @sql;

--2、在本地释放文件upload.sql

if object_id('tempdb.dbo.tmp_table') is not null

drop table tempdb.dbo.tmp_table;

select cast(@sql as nvarchar(max))as sText into tempdb.dbo.tmp_table;

exec master..xp_cmdshell 'bcp tempdb.dbo.tmp_table out "c:\upload.sql" -T -t"|" -w -q',no_output;

--select * from tempdb.dbo.tmp_table

--3、连接源端执行upload.sql(执行删除表)

set @cmd='osql -S '+@FromInstrance+' -U sa -P '+@FromPWD+' /d '+@FromDB+' /i c:\upload.sql';

--print (@cmd);

exec master..xp_cmdshell @cmd,no_output;

--4、删除本地表

if object_id('tempdb.dbo.tmp_table') is not null

drop table tempdb.dbo.tmp_table;

--5、删除临时文件

set @cmd='if exist c:\upload.sql del c:\upload.sql /f /s /q';

exec master..xp_cmdshell @cmd,no_output;

set @cmd='if exist c:\download.sql del c:\download.sql /f /s /q';

exec master..xp_cmdshell @cmd,no_output;

/*

--关闭高级选项

EXEC sp_configure 'xp_cmdshell',0

RECONFIGURE

EXEC sp_configure 'show Advanced options','0'

RECONFIGURE WITH OVERRIDE

*/

winxp上传文件到服务器,通过SQLServer的xp_cmdshell在服务器之间传送文件相关推荐

  1. WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等...

    核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...

  2. 利用计算机网络共享传文件,利用windows7系统家庭组让多台电脑(传送文件)资源共享...

    大部分网民家中大概都不止一台电脑,如果需要在家中的几台电脑之间传送文件,你会选择什么方法?用QQ传.用U盘拷?这两种方法最常见,操作起来也不难,但多少还是有点麻烦,尤其是在没有QQ或找不到U盘的情况下 ...

  3. vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码

    效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...

  4. 怎么把文件上传到java se_java se模仿http向web服务器上传文件

    主要使用的类: URL  HttpURLConnection 源代码: import java.io.DataOutputStream; import java.io.FileInputStream; ...

  5. 动易软件上传文件服务器错误,动易 应用程序中的服务器错误

    "/"应用程序中的服务器错误. 验证视图状态 MAC 失败.假如此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 A ...

  6. 文件上传漏洞实验-通过截取http请求绕过前端javascript验证进行文件上传

    1.什么是文件上传漏洞 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效的,部分文件上传漏洞 ...

  7. 总结排查服务器上传下载慢的几种手段与查看服务器带宽的具体方法

    一.排查服务器上传下载 最近出现的一个情况,服务器上传和下载比较慢,因此我排查了种种手段,特此记录下几种常见的手段. 1.使用speedtest-cli 测试网速: 该方法是测试网速的速度怎么样,看看 ...

  8. 如何在nuget上传自己的包+搭建自己公司的NuGet服务器(新方法)

    运维相关:http://www.cnblogs.com/dunitian/p/4822808.html#iis 先注册一个nuget账号https://www.nuget.org/ 下载并安装一下Nu ...

  9. java 上传远程图片,java上传图片到另一台服务器上,怎么解决

    Java codepublic String upload(String dir, FormFile formFile) throws Exception { Date date = new Date ...

最新文章

  1. 03 在百度地图上定位到指定位置
  2. virtual server2005下创建citrix集群的一点记录
  3. Linux下装完mysql后默认密码是多少
  4. mysql快速随机_MySQL随机取数据最高效的方法
  5. php连接db2失败,PHP_浅谈DB2数据库故障处理及最佳实践,  当你在使用数据库时,可 - phpStudy...
  6. [Android疑难杂症]动态设置TextView的width不起作用
  7. 程序应该怎样写比较规范
  8. Segmentation-Driven 6D Object Pose Estimation论文详解
  9. 《念奴娇·赤壁怀古》古词鉴赏
  10. Adobe Photoshop Lightroom 5.7.1
  11. 【模式匹配】之 —— Z-BOX算法
  12. 今日头条 2018 AI Camp 视频面试
  13. 磨金石教育摄影技能干货分享|什么是序列摄影?它让摄影更加深刻
  14. 跟小博老师一起学JSP ——EL表达式
  15. 用缓动动画实现鼠标跟随
  16. 黑白图转RGB(Matlab)
  17. USB TYPE C接口拆解及定义、USB3.1标准说明
  18. Stateful Firewall和SPI(stateful packet inspection) Firewall介绍
  19. uniapp 实现小程序,h5保存海报图片
  20. oh-my-zsh的安装与基本配置

热门文章

  1. 关于某些人和某些事的断想
  2. Linux循环登录怎么解决,文本模式循环登录! 求解决
  3. java 调用linux 脚本并获取返回值
  4. 解决 org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat异常
  5. Ant Design Pro 开发上手
  6. common lisp 学习第四天 变量、宏
  7. html块左右排列,html – 如何均匀地排列多个内嵌块元素?
  8. 使用jdbc执行SQL实现登录查询1-带配置文件和工具类
  9. liunx下搭建mysql主从_linux下搭建mysql主从
  10. 【OS学习笔记】二十一 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之内核代码