使用存储过程实现数据库备份

 在网上找到这样一个存储过程:

 

SQL Server 2005中并没有开启“xp_cmdshell”服务。开启方法如下:

 

xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。由于xp_cmdshell 可以执行任何操作系统命令,所以一旦SQL Server管理员帐号(如sa)被攻破,那么攻击者就可以利用xp_cmdshell 在SQL Server中执行操作系统命令,如:创建系统管理员,也就意味着系统的最高权限已在别人的掌控之中。由于存在安全隐患,所以在SQL Server 2005中, xp_cmdshell 默认是关闭的。
  两种方式启用xp_cmdshell
  1.打开外围应用配置器—>
  功能的外围应用配置器—>
  实例名Database Enginexp_cmdshell—>
  启用
  2.sp_configure
  -- 允许配置高级选项
  EXEC sp_configure 'show advanced options', 1
  GO
  -- 重新配置
  RECONFIGURE
  GO
  -- 启用xp_cmdshell
  EXEC sp_configure 'xp_cmdshell', 0
  GO
  --重新配置
  RECONFIGURE
  GO
  --执行想要的xp_cmdshell语句
  Exec xp_cmdshell 'query user'
  GO
  --用完后,要记得将xp_cmdshell禁用(从安全角度安全考虑)
  -- 允许配置高级选项
  EXEC sp_configure 'show advanced options', 1
  GO
  -- 重新配置
  RECONFIGURE
  GO
  -- 禁用xp_cmdshell
  EXEC sp_configure 'xp_cmdshell', 1
  GO
  --重新配置
  RECONFIGURE
  GO

本文采用的第一种方法。

 

经过实验,可以在本机(192.168.1.10)上实现对数据库的备份。但是存储到目标计算机(192.168.1.20)失败,结果显示为没有权限。

分析问题的原因应该是出现在“exec Master..xp_cmdshell @SQLStr --拷贝到目标机器上 ”语句上。

利用命令提示符可以将备份文件复制到"//192.168.1.20/SharedDocs/"文件夹下,于是想到是SQL Server 权限的问题。

 

 

网上搜索得到解决方法:

 

 

 

权限配置的问题,参考下面的设置来做映射(假设A服务器上的数据库备份到B服务器)(限局域网内)::  
   
  1.机器A,B创建一个同名的windows用户,用户组设置为administrators,并设置相同的密码,做为备份文件夹文件夹的有效访问用户,操作:  
  我的电脑  
  --控制面板  
  --管理工具  
  --计算机管理  
  --用户和组  
  --右键用户  
  --新建用户  
  --建立一个隶属于administrator组的登陆windows的用户  
   
  2.在B机器器上,新建一个共享目录,做为备份文件的存放目录,操作:  
  我的电脑--D:/   新建一个目录,名为:   BAK  
  --右键这个新建的目录  
  --属性--共享  
  --选择"共享该文件夹"  
  --通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限  
  --确定  
   
   
  3.设置   MSSQLSERVER   及   SQLSERVERAGENT   服务的启动用户  
  开始--程序--管理工具--服务  
  --右键   MSSQLSERVER  
  --属性--登陆--选择"此账户"  
  --输入或者选择第一步中创建的windows登录用户名  
  --"密码"中输入该用户的密码  
  --确定  
  --同样的方法设置   SQLSERVERAGENT  
   
  4.在A机器上完成对B机器BAK目录的映射  
   
  5.查询分析器中执行下面的语句,检验是否成功:  
      exec   master..xp_cmdshell   'dir   映射的盘符'

 

 

参考地址:

http://topic.csdn.net/t/20050509/22/3993464.html

http://blog.csdn.net/flyaim/archive/2008/11/01/3201031.aspx

http://www.cnblogs.com/yukui/archive/2009/10/14/1583214.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值