【问题标题】:Permissions error creating .bak back-up of SQL Server database on Amazon RDS在 Amazon RDS 上创建 SQL Server 数据库的 .bak 备份时出现权限错误
【发布时间】:2019-05-24 11:46:41
【问题描述】:

我继承了一个在 AWS 上运行的网站。我想要做的是备份 SQL Server 数据库(位于 Amazon RDS 上),以便我可以在本地设置开发环境。我有 AWS 控制台的登录凭据,但我是这个环境中的新手,所以我试图将流程和术语拼凑起来。

我已经阅读了docs here,了解如何启用 SQL 数据库的导入/导出。本指南中有 3 个设置步骤:

首先,我们需要一个 S3 存储桶。我从控制台看到我们已经有一个名为“sqlbackups”的存储桶,所以看起来以前的开发人员已经完成了这个过程。

其次,我们需要“一个 AWS Identity and Access Management (IAM) 角色来访问存储桶”。我通过从“服务”列表中转到“IAM”并从左侧导航中选择“角色”来检查控制台。我们似乎有一个名为“SQL_BackRestore_IAM”的 IAM 角色。我假设这是我们需要的,已经由之前的开发人员设置了吗?

第三,我们需要“将 SQLSERVER_BACKUP_RESTORE 选项添加到您的数据库实例上的选项组中。”。我去了 AWS 控制台 > RDS > 选项组,那里有一个名为“custom-option-group-for-sql-express-v11”的组,其中有“SQLSERVER_BACKUP_RESTORE”作为选项。所以,再一次,这看起来已经设置好了。

所以现在我认为我需要登录到实际的 SQL Server 并运行命令来调用存储过程来创建 .bak 备份。因此,我使用网站 web.config 文件中的凭据登录数据库并执行以下操作:

exec msdb.dbo.rds_backup_database 
@source_db_name='ExampleDBName',
@s3_arn_to_backup_to='arn:aws:s3:::sqlbackups/ExampleDBName.bak',
@type='FULL';

但是,我现在收到一个错误:

The EXECUTE permission was denied on the object 'rds_backup_database', database 'msdb', schema 'dbo'

可能与数据库登录没有执行备份的权限有关。我没有获得任何类型的 sa 或 master 数据库登录,所以我现在卡住了!

谁能建议我如何让这个备份命令工作?

非常感谢。

【问题讨论】:

  • 您应该与拥有该数据库的 DBA 交谈。如果数据库是“继承”的一部分,那么您应该与遗赠给您的人交谈,因为拥有 SA 访问权限是拥有数据库的一部分。
  • 我不相信他们是 RDS 中的“sa”角色,或者至少它通过服务的托管部分被混淆了,这是我困惑的一部分。我读过有一个“主人”的角色,但我又有点困惑,我是否应该去看看。我希望具有良好 RDA 知识的人能够肯定地知道。应该可以在 AWS 控制台中重置主账户详细信息,因此最终我确实可以控制,但我不知道这是否会破坏事情。我宁愿创建一个具有备份权限的新用户,但我不知道从哪里开始。
  • 称它为“master”,称它为“SA”,称它为“Blue Banana”——拥有数据库的人需要对其拥有完全且无限制的访问权限。如果您没有携带该访问权限的凭据,那么您需要与确实拥有这些凭据的任何人交谈。

标签: sql-server amazon-web-services amazon-rds


【解决方案1】:

我也遇到了同样的问题。

我通过使用 RDS 主用户名登录并运行备份程序解决了这个问题。

您可以在 RDS 数据库实例配置选项卡上找到主用户名。

所以在 AWS 控制台中:

RDS、数据库、选择数据库、配置

如果您不知道主用户名密码,您也可以通过单击数据库实例视图上的修改 来查找。在设置下设置密码。

【讨论】:

  • 谢谢。这应该被标记为正确答案。
【解决方案2】:

来自文档,

https://www.mssqltips.com/sqlservertip/5042/limitations-of-sql-server-native-backup-and-restore-in-amazon-rds/


用户需要对 msdb 数据库中的 rds_backup_database 具有执行权限。

USE master 
GO 
CREATE LOGIN rds_backup_operator WITH Password = 'somecomplexpassword', DEFAULT_DATABASE=master, 
   CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
GO 

USE msdb 
GO 
CREATE USER rds_backup_operator FROM LOGIN rds_backup_operator 
GO 
GRANT EXECUTE ON msdb.dbo.rds_backup_database TO rds_backup_operator 
GO 

希望对你有帮助!!!

【讨论】:

    【解决方案3】:

    我发布了一个answer on the AWS Forums,它解释了如何使用 Active Directory 用户/组和 MSA 帐户运行备份过程,以最简洁的方式执行此操作。

    在下面的示例中,[DOMAIN\msaSqlBackup$] 是在 EC2 实例上运行并执行相关备份命令的托管服务帐户。 [DOMAIN\SQL Admins\ 是一个 AD 组,它是 AWS SQL Server RDS 提供的 [admin] 内置用户帐户的代理。注意 WITH GRANT OPTION [DOMAIN\SQL Admins],它是从 [admin] 用户到 [DOMAIN\SQL Admins] AD GROUP 再到 [DOMAIN\msaSqlBackup$] AD Group MSA 帐户的授权链所必需的。如果没有这一步,你还需要执行GRANT CREATE ANY DATABASE TO [NewLoginName] WITH GRANT OPTION;GRANT VIEW ANY DATABASE TO [NewLoginName] WITH GRANT OPTION; 以管理员帐户执行此操作。这不是首选,因为它 (1) 不必要地提升了 NewLoginName 的权限 (2) 意味着您在 DBA 团队中使用基于共享密码的帐户来管理您的 AWS SQL Server RDS 实例。

    USE master
    GO
    CREATE LOGIN [DOMAIN\msaSqlBackup$] FROM WINDOWS
    GO 
     
    USE msdb
    GO
    CREATE USER [DOMAIN\msaSqlBackup$] FROM LOGIN [DOMAIN\msaSqlbackup$]
    GO
    GRANT EXECUTE ON msdb.dbo.rds_backup_database TO [DOMAIN\msaSqlBackup$] WITH GRANT OPTION [DOMAIN\SQL Admins]
    GO 
    GRANT EXECUTE ON msdb.dbo.rds_restore_database TO [DOMAIN\msaSqlBackup$] WITH GRANT OPTION [DOMAIN\SQL Admins]
    GO 
    GRANT EXECUTE ON msdb.dbo.rds_task_status TO [DOMAIN\msaSqlBackup$] WITH GRANT OPTION [DOMAIN\SQL Admins]
    GO 
    GRANT EXECUTE ON msdb.dbo.rds_cancel_task TO [DOMAIN\msaSqlBackup$] WITH GRANT OPTION [DOMAIN\SQL Admins]
    GO
     
    USE name_of_database_to_backup
    GO
    CREATE USER [DOMAIN\msaSqlBackup$] FROM LOGIN [DOMAIN\msaSqlBackup$]
    GO
    ALTER ROLE db_backupoperator ADD MEMBER [DOMAIN\msaSqlBackup$]
    GO
    

    【讨论】:

      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2015-02-10
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多