我有一个安装了支持视频应用程序的 SQL Server Express 2014 的 Windows Server 2012R2。我正在尝试使用任务计划程序为它创建一个备份解决方案来执行完整和增量备份。我让任务调度程序执行一个批处理文件,该批处理文件使用 SQLCMD 来运行执行备份的存储过程。这是批处理文件:
@Echo Off
"C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SqlCmd.exe" -S SERVER\INSTANCE -i "C:\Scripts\FullBackup.sql"
它运行的 SQL(在 FullBackup.sql 中)如下:
exec spBackupDatabases '\\BackupServer\Backup\Database\Server\', 'F';
spbackupDatabases 存储过程在 Master 中创建。当我以我自己(本地管理员)身份登录的 SSMS 运行此存储过程时,它工作正常。当我尝试从批处理文件中运行相同的东西时,仍然以我自己的身份登录,我收到以下错误:
C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn>\scripts\FullBackup.cmd
Msg 229, Level 14, State 5, Server SERVER\INSTANCE, Procedure spBackupDatabases, Line 1
The EXECUTE permission was denied on the object 'spBackupDatabases', database 'master', schema 'dbo'.
SQL Server 日志中没有任何内容(即使打开了失败和成功的登录),所以我什至不确定正在使用哪个用户。我可能做错了什么?
最后,我不得不给自己明确的数据库执行权限。即使我是数据库的所有者、数据库的系统管理员和服务器上的管理员等 - SQLCMD 只有在我拥有执行权限时才能工作。