您的位置:首页 > 数据库

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

2013-06-14 13:10 706 查看
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

a和b1的差异有多大,差异最大的位置在哪里。T1

a和b2的差异有多大,差异最大的位置在哪里.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 = '已知密码';

还原成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: