安全地将 SQL Server 数据库和其他文件备份到远程计算机






4.25/5 (5投票s)
2007 年 4 月 15 日
3分钟阅读

77178

1322
一个有效的实用程序,用于安全地将 SQL Server 数据库和/或一组文件备份到远程机器
引言
在 SQL Server 中进行备份是多么麻烦!您必须打开企业管理器,向下滚动到您想要的数据库,右键单击,选择“备份”等等……无聊!
此应用程序将定期
- 备份所选数据库
- 将数据库备份(非常可压缩!)与您想要的任何其他文件一起压缩
- 加密该 zip 文件
- 将文件发送到远程机器
使用代码
让我们先看看应用程序配置文件。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="BackupName" value="NorthwindBackup"/>
<!-- The base name of the backup file -->
<add key="DBName" value="Northwind"/>
<!-- The database to be backed up -->
<add key="DBUsername" value="sa"/>
<!-- The user to login to database -->
<add key="DBPassword" value=""/>
<!-- The password of the database user -->
<add key="BackupDirs" value="C:\app_server\"/>
<!-- Any files or directories to be backed up -->
<add key="ExcludeDirs" value="bin,obj"/>
<!-- The name of directories to EXCLUDE when backing up -->
<add key="SSHServer" value="offsite.com"/>
<!-- Remote server and login details -->
<add key="SSHUsername" value="username"/>
<add key="SSHPassword" value="password"/>
<add key="KeyString" value="f+WAB8/Spgu3w6LLFM10a2ZyRWIy8vaVTvF/lhLSaME="/>
<!-- Key used to encrypt backup -->
<add key="IVString" value="B3vXRDLkYltYjl3QzZP2jQ=="/>
<!-- IV used to encrypt backup -->
<add key="IsBackup" value="true"/>
<!-- Whether you are backing up or restoring -->
</appSettings>
</configuration>
第一个设置 BackupName
只是我们将数据库备份和要备份的任何文件放入的 zip 文件的名称。 在上面的示例中,此 zip 文件将包含 Northwind 数据库以及 'C:\app_server\' 下的任何文件。然后对 zip 文件进行加密,并使用 SSH 发送到 SSHServer 指定的机器,或者在这种情况下,offsite.com
需要注意的一些事项。
- 如果您只想备份文件(而不是 SQL Server),请设置
DBName=""
(同样清除BackupDirs
以仅执行 SQL 备份) - 所有备份都带有日期戳以防止覆盖 - 在上面的示例中,远程文件的名称为 NorthwindBackup_20070411.encrypted
- 用于加密数据的密钥存储在配置文件中,因此您必须加密配置文件 - 请参阅下文了解如何执行此操作。
可能最有趣的部分是如何从 C# 备份数据库。 以下 T-SQL 正是这样做的
DECLARE @Date VARCHAR(300), @Dir VARCHAR(4000)
--Get today's date
SET @Date = CONVERT(VARCHAR, GETDATE(), 112)
--Set the directory where the back up file is stored
SET @Dir = 'E:\BackupUtil\NorthwindBackup_20070411.bak'
--create a 'device' to write to first
EXEC sp_addumpdevice 'disk', 'temp_device', @Dir
--now do the backup
BACKUP DATABASE Northwind TO temp_device WITH FORMAT
--Drop the device
EXEC sp_dropdevice 'temp_device'
请注意,这是动态生成的代码。 显然,数据库的名称和备份文件的名称会发生变化。
利用现有代码
我使用了外部库来压缩备份文件,并安全地发送它。
- 压缩 - ICSharpCode.SharpZipLib
- SSH - sharpSsh
如何定期运行备份? 别担心,只需使用 Windows 中的计划任务(开始 -> 控制面板 -> 计划任务) 使用向导指向备份可执行文件。 在选择执行任务的频率时,我建议选择“每周”。
现在您可以选择单独的日期(例如仅工作日)
如果您选择了“每日”,您将无法选择仅在工作日运行它。
安全
我强烈建议您在远程机器上创建一个仅用于备份的用户。 因此,如果帐户被盗用,用户只能访问加密的备份(而不是整个机器!)。 严格来说,传输到远程机器本可以不安全地完成(例如 FTP),但我喜欢 SSH...
最后但并非最不重要的一点是,我知道有些人会因将加密密钥、远程机器登录详细信息和数据库密码存储为“纯文本”而感到愤怒。 您*必须*通过右键单击并选择“属性”来加密配置文件
现在单击“高级”(如上所示)
确保选中“加密内容以保护数据”。
现在,只有应用了上述操作的用户才能读取配置文件。
恢复
首先,您需要从远程机器(.encrypted 文件)检索您的备份文件。 然后,在配置文件中,需要将以下行从
<add key="IsBackup" value="true"/>
<!-- Whether you are backing up or restoring -->
to
<add key="IsBackup" value="false"/>
<!-- Whether you are backing up or restoring -->
当您使用 IsBackup=false
运行应用程序时,将出现一个文件浏览器,询问您要恢复哪个 .encrypted 文件。 这个 .encrypted 文件变成一个 .zip 文件,其中包含您的数据库和已备份的文件 - 太简单了!
最后...
非常感谢您的评论,我总是想让它“更好”。