我已经继承了一个在AWS上运行的网站。我想做的是备份SQL Server数据库(在Amazon RDS上(,以便我可以在本地设置开发环境。我有AWS控制台的登录凭证,但我是这个环境中的完整新来者,所以我试图将过程和术语拼凑在一起。
我已经在此处阅读了有关如何启用SQL数据库导入/导出的文档。本指南中有3个设置步骤:
首先,我们需要一个S3存储桶。从控制台我可以看到我们已经有一个称为" sqlbackups"的存储桶,因此看来以前的开发人员已经完成了此过程。
其次,我们需要" AWS身份和访问管理(IAM(角色来访问存储桶"。我通过从"服务"列表中转到" IAM"并从左侧的导航中选择"角色"来检查控制台。我们似乎有一个名为" sql_backrestore_iam"的IAM角色。我假设这是我们需要的,已经由以前的开发人员设置了?
第三,我们需要"添加到db实例上的选项组中的sqlserver_backup_restore选项"。我去过AWS控制台> RDS>选项组,其中一个组称为" custom-option-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或主数据库登录,所以我现在卡住了!
谁能建议我如何获得此备份命令工作?
非常感谢。
我也有同样的问题。
我通过使用RDS Master用户名进行登录并运行备份过程解决了它。
您可以在RDS数据库实例配置选项卡上找到主用户名。
因此,在AWS控制台中:
RD,数据库,选择数据库,配置
如果您不知道主用户名密码,也可以通过在数据库实例视图上单击修改来找到。在设置下设置密码。
来自文档,
https://www.mssqltips.com/sqlservertip/5042/limitations-of-er-sql-sql-server-native-native-native-native-native-backup-and-restore-in-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
希望这会有所帮助!
我在AWS论坛上发布了一个答案,该答案通过使用Active Directory用户/组和一个MSA帐户来运行备份过程。/p>
在下面的示例中,[域 msasqlbackup $]是一个在EC2实例上运行并执行关联备份命令的托管服务帐户。[域 SQL Admins 是一个广告组,是AWS SQL Server RDS提供的内置用户帐户的代理。请注意,带有赠款选项[域 SQL Admins],这是将[admin]用户传达给[domain sql admins] ad group的赠款链所需的,而[domain sql admins] ad group to [domain msasqlbackup $] AD组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 SQL Server RDS Instances。
USE master
GO
CREATE LOGIN [DOMAINmsaSqlBackup$] FROM WINDOWS
GO
USE msdb
GO
CREATE USER [DOMAINmsaSqlBackup$] FROM LOGIN [DOMAINmsaSqlbackup$]
GO
GRANT EXECUTE ON msdb.dbo.rds_backup_database TO [DOMAINmsaSqlBackup$] WITH GRANT OPTION [DOMAINSQL Admins]
GO
GRANT EXECUTE ON msdb.dbo.rds_restore_database TO [DOMAINmsaSqlBackup$] WITH GRANT OPTION [DOMAINSQL Admins]
GO
GRANT EXECUTE ON msdb.dbo.rds_task_status TO [DOMAINmsaSqlBackup$] WITH GRANT OPTION [DOMAINSQL Admins]
GO
GRANT EXECUTE ON msdb.dbo.rds_cancel_task TO [DOMAINmsaSqlBackup$] WITH GRANT OPTION [DOMAINSQL Admins]
GO
USE name_of_database_to_backup
GO
CREATE USER [DOMAINmsaSqlBackup$] FROM LOGIN [DOMAINmsaSqlBackup$]
GO
ALTER ROLE db_backupoperator ADD MEMBER [DOMAINmsaSqlBackup$]
GO