繁体   English   中英

让Sql SMO删除数据库备份文件

[英]Have Sql SMO Delete Database Backup File

我创建了一个C#应用程序,该应用程序允许备份和还原数据库。 为此,它首先使用以下方法将数据库备份到Sql服务器上的本地文件中:

Backup backup = new Backup();
backup.Devices.AddDevice(Path.GetFullPath(backupFilePath), DeviceType.File);
...
backup.SqlBackup(server);

然后,我使用以下方法从备份文件中恢复来创建新数据库:

Restore restore = new Restore();
restore.Devices.AddDevice(Path.GetFullPath(backupFileToRestoreFrom), DeviceType.File);
...
restore.SqlRestore(server);

创建新数据库后,我要删除我们创建的临时备份文件。 因为我对Sql服务器具有管理员权限,所以可以使用以下命令删除远程服务器上的文件:

File.Delete("\\SqlServer\C$\Backups\BackupFileToDelete.bak")

而且有效。 但是,如果其他对Sql服务器框没有权限的人运行该应用程序,它将引发有关没有权限的异常。

那么,有没有我可以调用的Sql SMO函数来删除在远程Sql服务器上创建的备份文件?

如果使用xp_cmdshell删除文件,则它将使用sql服务器的权限而不是个人的权限。

例如:

EXEC master..xp_cmdshell 'Del \\SqlServer\C$\Backups\BackupFileToDelete.bak', NO_OUTPUT

这是xp_cmdshell上的参考

该文章要注意的重要事项是:

由于恶意用户有时会尝试通过使用xp_cmdshell提升特权,因此默认情况下禁用xp_cmdshell。 使用sp_configure或基于策略的管理来启用它。 有关更多信息,请参见xp_cmdshell服务器配置选项。

另一种可能性是使用SQLCLR,它比使用xp_cmdshell更安全。 甚至还有一个CodePlex项目调用SQLCLR File Functions ,它具有为我编写为存储过程的功能。 我想我将看看是否可以说服我们的DBA沿这条路走。 不利之处在于,我认为将在每个现有的和新创建的SQL Server上安装由此创建的存储过程。 虽然我猜想与必须在每个服务器上启用xp_cmdshell没什么不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM