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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:57:11