如何在AWS RDS SQL Server只读副本上创建数据库用户?
在AWS RDS SQL Server只读副本上配置数据库用户的解决方案
AWS RDS SQL Server的只读副本无法同步主库的server级登录名,且副本自身处于只读状态,不能直接创建用户/登录名,可通过以下步骤解决:
1. 从主库提取登录名关键信息
在主实例的master数据库中执行查询,获取目标登录名的SID和密码哈希:
SELECT name AS login_name, CONVERT(VARCHAR(MAX), sid, 1) AS sid_hex, CONVERT(VARCHAR(MAX), LOGINPROPERTY(name, 'PasswordHash'), 1) AS password_hash_hex FROM sys.sql_logins WHERE name = '目标登录名';
注意:这里将SID和哈希转换为十六进制字符串,方便后续在副本中使用。
2. 临时开启副本master库的写权限
通过RDS内置存储过程,临时允许当前会话修改master库:
EXEC rdsadmin.dbo.rds_set_configuration 'allow_manual_master_db_changes', 1;
3. 在副本创建匹配的登录名
使用步骤1获取的十六进制SID和密码哈希,在副本的master库中创建登录名,必须保证SID与主库完全一致:
CREATE LOGIN [目标登录名] WITH PASSWORD = 0x替换为步骤1的password_hash_hex值 HASHED, SID = 0x替换为步骤1的sid_hex值;
4. 关闭临时写权限
完成登录名创建后,恢复副本的只读限制:
EXEC rdsadmin.dbo.rds_set_configuration 'allow_manual_master_db_changes', 0;
验证访问
此时该登录名即可连接只读副本,访问对应的数据库——因为主库已同步数据库用户到副本,且新创建的登录名SID与数据库用户的SID匹配,权限会自动生效。
重要提示
- 仅对需要访问副本的登录名执行此操作,避免对
master库的不必要修改 - 主库新增需访问副本的登录名时,需重复上述流程
- 若只需要数据库级别的权限(无需登录实例),确保主库的数据库用户已同步到副本,再通过上述步骤创建对应登录名即可
内容的提问来源于stack exchange,提问作者Mahmut EFE
相关产品推荐
相关产品推荐

