You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server Express 2019自动备份权限错误排查求助

SQL Server Express 2019自动备份权限问题排查

我正尝试为SQL Server Express 2019配置自动备份,使用Ola Hallengren的维护脚本。从提升权限的命令提示符执行以下命令:

sqlcmd -E -S .\SQLEXPRESS -d master -Q 
"USE master; 
grant execute on dbo.master.DatabaseBackup to [TODDCOM\itadmin];
EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = 'c:\sql2019\backup', @BackupType = 'FULL', @Verify = 'Y', @CheckSum ='Y'" -b -o C:\SQL2019\Backup\DatabaseBackup.txt
robocopy c:\sql2019\backup \\NAS\backup\SQL\ /E /MIR /LOG:"\\NAS\Backup\robocopy-log.txt" /np

DatabaseBackup.txt中报告以下错误:

Changed database context to 'master'.
Msg 15151, Level 16, State 1, Server SPURR\SQLEXPRESS, Line 1
Cannot find the object 'DatabaseBackup', because it does not exist or you do not have permission.
Msg 229, Level 14, State 5, Server SPURR\SQLEXPRESS, Procedure dbo.DatabaseBackup, Line 1
The EXECUTE permission was denied on the object 'DatabaseBackup', database 'master', schema 'dbo'.

我已使用select suser_sname()确认所用账户与授权账户一致,目前已在以下位置配置了执行权限:

  • master数据库的dbo架构
  • Security\Users文件夹中的'domain\admin'账户,已添加执行权限
  • 在SSMS中右键master数据库,为'domain\admin'账户分配执行权限
  • 右键所有用户数据库,为'domain\admin'账户添加执行权限

我认为只需在一处配置权限,但无法确定具体位置,恳请帮助排查问题。


更新1

根据反馈更新了命令及错误报告。

更新2

补充信息:我从计划任务批处理文件中执行以下代码:

sqlcmd -E -S .\SQLEXPRESS -d master -Q "SELECT SUSER_NAME(); select name, USER_NAME(s.principal_id) AS Schema_Owner from sys.schemas s;" -o C:\SQL2019\Backup\User.txt

输出结果为:

domain\admin

(1 rows affected)
name                 Schema_Owner
-------------------- ----------------
dbo                  dbo
guest                guest
INFORMATION_SCHEMA   INFORMATION_SCHEMA
sys                  sys
db_owner             domain\admin
db_accessadmin       db_accessadmin
db_securityadmin     db_securityadmin
db_ddladmin          db_ddladmin
db_backupoperator    domain\admin
db_datareader        db_datareader
db_datawriter        db_datawriter
db_denydatareader    db_denydatareader
db_denydatawriter    db_denydatawriter

(13 rows affected)

排查与解决步骤

  1. 验证存储过程是否存在
    先确认DatabaseBackup存储过程是否在master数据库的dbo架构下正确创建,执行以下SQL:

    USE master;
    SELECT * FROM sys.procedures WHERE name = 'DatabaseBackup';
    

    若查询无结果,说明维护脚本未正确执行,需重新运行脚本安装存储过程。

  2. 修正权限授予语句
    原命令中的权限授予格式错误,正确的对象引用应为master.dbo.DatabaseBackup或在master库上下文直接写dbo.DatabaseBackup,且要确保授权对象是实际运行的domain\admin账户:

    USE master;
    GRANT EXECUTE ON dbo.DatabaseBackup TO [domain\admin];
    
  3. 核对存储过程架构归属
    检查存储过程所属架构是否为dbo,执行:

    USE master;
    SELECT name, schema_name(schema_id) AS schema_name FROM sys.procedures WHERE name = 'DatabaseBackup';
    
  4. 直接测试存储过程执行
    在SSMS中用domain\admin账户登录,直接执行备份语句:

    USE master;
    EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = 'c:\sql2019\backup', @BackupType = 'FULL', @Verify = 'Y', @CheckSum ='Y';
    

    以此区分是命令行执行的环境问题,还是权限本身的问题。

  5. 检查目录权限
    确认domain\admin账户对c:\sql2019\backup本地目录、\\NAS\backup\SQL\共享目录拥有读写权限。

内容的提问来源于stack exchange,提问作者DauntlessRob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:50:43