如何使用AWS DMS实现RDS SQL Server到EC2 SQL Server的持续复制?
解决AWS DMS从RDS SQL Server复制到EC2 SQL Server的sysadmin权限错误
我明白你遇到的困境了——AWS RDS SQL Server确实不让我们直接给用户分配sysadmin固定服务器角色,但DMS官方文档又说这个场景是支持的,其实问题出在权限配置的细节上,不需要sysadmin也能搞定。下面是具体的解决步骤:
1. 给RDS SQL Server的源用户配置正确的权限
RDS SQL Server虽然没有sysadmin,但DMS只需要特定的服务器和数据库级别权限就能完成数据捕获。你可以按照以下SQL命令创建并配置专用的DMS源用户:
-- 1. 先在master数据库创建登录名(用你的RDS管理员账号执行) USE master; CREATE LOGIN dms_source_user WITH PASSWORD = 'YourStrongPassword123!'; -- 2. 切换到需要复制的目标数据库,创建对应的用户 USE YourTargetDatabase; CREATE USER dms_source_user FOR LOGIN dms_source_user; -- 3. 授予服务器级别的必要权限(master数据库执行) USE master; GRANT ALTER ANY EVENT SESSION TO dms_source_user; GRANT VIEW SERVER STATE TO dms_source_user; GRANT VIEW ANY DEFINITION TO dms_source_user; -- 4. 授予数据库级别的权限(目标数据库执行) USE YourTargetDatabase; -- 如果你想给全权限,用这个: GRANT CONTROL ON DATABASE::YourTargetDatabase TO dms_source_user; -- 要是想更细粒度,替换上面的CONTROL为以下权限: -- GRANT SELECT, ALTER, VIEW CHANGE TRACKING ON DATABASE::YourTargetDatabase TO dms_source_user; -- GRANT VIEW DATABASE STATE TO dms_source_user;
这些权限已经足够让DMS读取源数据库的事务日志、捕获变更,同时不需要sysadmin角色。
2. 检查DMS源端点的配置
创建DMS源端点时,注意这几个细节:
- 确保源引擎选择的是SQL Server,并且在端点的“附加连接属性”中,不需要额外添加会触发sysadmin校验的参数。RDS环境下DMS会自动适配,不需要特殊参数来强制sysadmin权限。
- 用刚才创建的
dms_source_user作为连接用户,测试连接是否能成功(测试通过说明权限配置没问题)。
3. 配置EC2 SQL Server的目标用户权限
目标端是你自己托管的EC2 SQL Server,权限配置更灵活:
- 创建一个专用的DMS目标用户(比如
dms_target_user),给它分配db_owner角色,或者至少授予INSERT、UPDATE、DELETE、CREATE TABLE、ALTER TABLE这些权限——DMS需要创建表结构并写入数据。 - 如果是增量复制,确保目标用户有足够权限处理变更数据的写入。
4. 调整DMS任务的设置
创建DMS任务时:
- 选择正确的迁移类型(比如“全量迁移+持续增量复制”),如果是增量复制,DMS会自动读取RDS SQL Server的事务日志,不需要你手动开启CDC(变更数据捕获)。
- 在任务的高级设置里,不要启用需要服务器级sysadmin权限的特殊选项,保持默认的增量捕获配置即可。
完成以上步骤后,重新创建DMS任务,应该就不会再出现那个“Only members of the sysadmin fixed server role can perform this operation”的错误了。
内容的提问来源于stack exchange,提问作者Muhammad Rehan Saeed
相关产品推荐
相关产品推荐

