我正在使用此脚本备份计算机A:上的SQL Server数据库
sqlcmd -U MyDatabase -P MyPassword -S .SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation = 'c:shared', @databaseName='MyDatabase', @BackupType='F'"
一切都很好,但我决定将备份文件存储到计算机B。我在计算机B上共享了文件夹,可以从访问
\computerBshared
我更改了备份脚本以包含新的备份位置:
sqlcmd -U MyDatabase -P MyPassword -S .SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation = '\computerBshared', @databaseName='MyDatabase', @BackupType='F'"
但当我运行这个时,我会得到这个错误:
无法打开备份设备'\computerB\shared\MyDatabase_FULL_101 22022_232734.BAK'。操作系统错误5(访问被拒绝.(。
Msg 3013,级别16,状态1,服务器WIN-C28934ASNF1\SQLEXPRESS,第1行
BACKUP DATABASE异常终止。
我不明白为什么我会得到Access denied
。我可以从计算机A上的文件资源管理器轻松访问\computerBshared
。这里出了什么问题?
我们必须仔细考虑运行备份过程的用户帐户。
当您在Windows文件资源管理器中访问\computerBshared
位置时,您将使用自己的用户帐户。当您运行sqlcmd
脚本时,它可能也使用您自己的用户帐户。但是,脚本告诉SQL Server执行备份操作;它不直接自己执行备份。SQL Server正在使用不同的帐户运行。此不同的帐户无权访问共享文件夹。
若要解决此问题,可以更改用于运行SQL Server的帐户,也可以让SQL Server进行本地备份,然后在备份完成后将一个或多个文件复制到共享中。
您可能无法授予SQL Server当前服务帐户对共享文件夹的访问权限,因为它很可能是一个特殊帐户,如SYSTEM(希望不是(或Network service,无法授予此访问权限。