忘记密码 密码保护SqlServer备份文件恢复方法

原文出处:http://blog.csdn.net/langzxz/article/details/9093877

Sql sever有这么一功能

设置密码保护SqlServer数据库备份文件

备份SqlServer数据库
Backup Database [数据
] To disk='c:\mysql.bak' With Password = '123',init;
恢复SqlServer
数据库
Restore Database [
数据库] From disk='c:\mysql.bak' With Password = '123';

但是忘记密码后怎么还原数据库?

在备份文件SSET结构中,也就是sql2005备份文件的第三扇区。第0x7a(一般是这样)字节开始16个字节就是密码。


圈出来的偏移72字节 Data Set Password 就是记录密码的地址,User Name 就是做备份的用户。


通过语句备份一个有密码保护的数据库,然后用第三扇区的0x7a字节开始的16字节copy到要恢复的不知道密码的备份文件的相同位置覆盖。

然后

Restore Database [aa] From disk='H:\data\data.bak'WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10,MOVE 'dzsc' TO'g:\aa.mdf', MOVE 'dzsc_log' TO 'g:\aa_log.ldf',Password = '已知密码';

FILE = 1数据文件的id

'dzsc''dzsc_log'库文件的逻辑名,如果不知道,去掉(MOVE 'dzsc' TO 'g:\aa.mdf', MOVE 'dzsc_log' TO'g:\aa_log.ldf',执行一下语句就知道了。

同一个库 做两个无密码备份,一个密码为1的备份,一个密码为2的备份

通过两个无密码文件对比知道哪里有差异,a

通过一个无密码和一个有密码文件对比,知道哪里有差异 b1

通过一个无密码和另一个有密码文件对比,知道哪里有差异 b2

ab1的差异有多大,差异最大的位置在哪里。T1

ab2的差异有多大,差异最大的位置在哪里.T2

发现T1=T2.

将其中一个有密码备份的T1位置的数据(16字节)换成另一个有密码备份的T2位置的数据,

执行Restore Database [数据库] From disk='c:\mysql.bak' With Password = '123';

根据提示的错误修改sql语句,最后得到

Restore Database [aa] From disk='H:\data\data.bak'WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10,MOVE 'dzsc' TO'g:\aa.mdf', MOVE 'dzsc_log' TO 'g:\aa_log.ldf',Password = '已知密码';

还原成功!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值