[英]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.