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

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

*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习之路:多态实例

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋…

pwm控制舵机转动角度程序_Mixly 第15课 舵机的使用

第15课 舵机的使用舵机的旋转不像普通电机那样只是转圈圈,它可以根据你的指令旋转到0至180度之间的任意角度然后精准的停下来。舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的。舵机比较多的用于对角度有要求的场合,比如机器人、摄像…

css没有border,你未必知道的CSS小知识:为什么没有人使用border-image

之前我曾经写过一篇关于CSS的border-image属性的文章。现在几乎所有的现代浏览器都支持这个属性——除了IE10及以下IE版本。看起来这是一个非常漂亮的CSS功能,它可以让你用图片修饰元素的边框。下面是一个实例演示,你可以拖拽调整里面的方块的大小&#…

1、初始JAVA

一、 语言的翻译分两种: 编译型语言:例如c语言、c语言 优点:速度快 缺点:不能跨平台 编译器编译——>特定平台的目标文件obj——>特定平台 解释型语言:例如PHP语言、JavaScript语言 优点&am…

base64 转文件_PHP伪协议与文件包含

PHP伪协议与文件包含PHP伪协议与文件包含php:// 协议php://inputphp://filterdata:// 协议file:// 协议zip://、bzip2://、zlib://协议zip://协议bzip2://协议zlib://协议phar://伪协议文件包含漏洞(File Inclusion)文件包含漏洞:即file inclusion,意思是…

为什么移动卡上到手机上显示无服务器,移动手机卡加密失败然后就没有服务器无聊的时候给手机卡加密因为不知? 爱问知识人...

解决方法:a ) 该方法通常适用于一台或数台客户端不能登录的情况,不适用于所有的客户端不能登录的情况,首先,检查服务器上有无该客户端当前登录用户名,如有则可能是客户端的擅自更改了客户端的用户windows登录密码&…

Java基础_0206:方法的定义与使用

方法的基本概念 方法的主要功能是封装可以执行的一段代码,这样不仅可以进行重复调用,更可以方便的实现代码的维护,而本次使用的方法定义语法如下所示。 public static 返回值类型 方法名称(参数类型 参数变量, ...) {方法体(本方法…

redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper

Redis集群架构【课程介绍】Redis是现在使用为广泛的NoSQL数据库技术,其自身不仅拥有着良好的操作性能,也被广泛的应用于各种集群架构的数据整合处理之中,而本课程将通过Redis的核心作用,以及单实例redis存在的问题为读者进行分析&…

ajax 提交 .net ispostback不执行,ASP.NET基于Ajax的Enter键提交问题分析

本文实例讲述了ASP.NET基于Ajax的Enter键提交。分享给大家供大家参考,具体如下:近日遇到一个Enter键的问题,总结下:1. 首先复习下html form对Enter的响应,不同的浏览器对Enter的处理略有不同,这里采用IE7A.…

mysql-用正则表达式进行搜索

正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较,mysql允许你指定正则表达式,过滤select检索出的数据。但是mysql仅仅支持正则表达式的一个子集。 1、基本字符匹配: select prod_n…

python爬虫课程大纲_马哥2018python全栈+爬虫+高端自动化课程大纲

资源内容: 马哥2018python全栈爬虫高端自动化课程大纲|____51项目八-跳板机.rar|____50项目七-运维流程系统.rar|____49项目六-任务调度系统scheduler.rar|____48项目五CMDB资产管理.rar|____47项目四-多人博客开发.rar|____46(项目三)React开发及Todolist项目.rar|…

NopCommerce用.net core重写ef

最近看了NopCommerce源码,用core学习着写了一个项目,修改的地方记录下。项目地址 NopCommerce框架出来好久了。18年的第一季度 懒加载出来后也会全部移动到.net core。那么就更好玩了。 项目内容 模仿部分分层模式引擎机制DI容器EF仓储模式Mapping部分修…

服务器u8系统数据库不存在,用友u8服务器端数据库不装

用友u8服务器端数据库不装 内容精选换一换本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景:弹性云服务器的操作系统以Linux为例,客户端本地使用的计算机系统以Windows为例。目标实…

ie传递给系统调用的数据区域太小_内存区域与内存溢出异常

自动内存管理机制运行时数据区:Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时创建的,仅在Java虚拟机退出时销毁。其他数据区域是每个线程所占的空间。线程数据区域是随着线程销毁和创建的。PC 寄存器(…

0010服务器无对应信息,服务器版本对应的内存

服务器版本对应的内存 内容精选换一换硬件要求如表1所示。操作系统要求如表2所示。上表中所需Ubuntu下载地址:服务器1:Ubuntu 18.04.1镜像包、Ubuntu 16.04.4 镜像包。服务器2:Ubuntu 16.04.3 镜像包。在安装操作系统过程中“选择软件列表”时…

idea中连接mysql插入成功数据 在navicat中刷新表格没有数据_MySQL入门简记

1、MySQL和Navicat的安装下载地址:MySQL官方网站 https://dev.mysql.com/downloads双击下载的mysql-installer-community-8.0.17.0 .msi开始安装。需要注意(Authentication Method)这一步:因为需要使用客户端navicat,在…

jdbc执行sql 不支持“variant”数据类型。

把查询出来的列转换下类型 select cast(a as varchar(500)) from bcast( as varchar(500)) 转载于:https://www.cnblogs.com/zhousiwei/p/10625694.html

for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题

问题描述: 笔者在文本分类场景中使用了robertapooldense的三分类模型。采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据。在我尝试暴力出奇迹的时候,遇到了部分问题,在此记录一下。一. 数据预处理时…

谁决定了人的选择?

是好恶? 还是利益? 你看到的 是4个 圆点 还是 一头 大象? 用 利益 来衡量人的动机 当 不能解释的 时候 用情感 来弥补 那些 你最喜欢的 往往 是 最伤害你的 转载于:https://www.cnblogs.com/fangtengfei/p/8362125.html

future.cancel不能关闭线程_彻底弄懂线程池-newFixedThreadPool实现线程池

public class ExecutorServiceTest {public static void main(String[] args) throws IOException, InterruptedException {// 创建一个固定大小的线程池ExecutorService service Executors.newFixedThreadPool(3);for (int i 0; i < 10; i) {System.out.println("创…