是否可以让不同的用户访问我的只读副本数据库?这实际上不是只读副本的一个流行用例吗?我希望一组有限的凭据能够访问我的主读写数据库,然后我希望其他人能够对只读副本进行只读访问以进行报告、临时查询等我不一定希望两个数据库具有完全相同的访问器。
我在托管只读副本的服务器上创建了 Microsoft Entra 登录名,但以下是当我尝试创建用于数据库访问的用户时得到的结果。
Msg 3906, Level 16, State 2, Line 1
Failed to update database "********" because the database is read-only.
嗯,当然数据库是只读的,它是我的只读副本。但我并不是尝试将数据写入数据库,只是为组织中允许访问只读副本的人员设置元安全详细信息。这不能做吗?
是的,在某种程度上。
将读取从主数据库移至可读副本?是的!
我不完全确定“完全相同的访问器”是什么意思,但我将其视为“我不希望每个实例上都有相同的登录名和用户”。鉴于这种理解,答案是否定的,目前不可能。
您可以对每个实例拥有不同的访问权限,但数据库本身需要为该登录创建用户,或者登录需要为
sysadmin
.该元数据存在于数据库中,所以是的,您正在尝试将数据写入数据库。
Users
存在于数据库中,并通过其 SID 与登录名(存在于master
)相关联。如果您尝试向实例添加登录名,那就没问题并且可以工作。如果您尝试添加用户,则需要将其添加到主副本并将其传递到辅助副本。不需要在每个副本上进行登录,并且不能按照所讨论的方式更改用户。是的,主数据库是数据库的唯一可写副本,添加用户需要写入数据库。
是的。如果您不希望该登录名访问该服务器上的数据库,则不要添加它。我相信,这就是您在问题中要求实现的目标。
如果是将与用户绑定的 SQL 登录名,则使用
SID
的选项CREATE USER
。如果是域登录,则只需使用CREATE USER
域登录名即可。在这两种情况下,用户都将拥有正确的 SID 来将其绑定到登录名。主服务器(任何给定时间点的服务器)是唯一可以添加用户的位置。如果您希望用户具有访问权限,则需要在那里完成。除非使用
sysadmin
登录,否则登录将需要关联的用户(从技术上讲,您可以执行其他操作来在没有用户的情况下进行访问,但这充其量是可疑的)。每个服务器不需要相同的登录名,只需要您在该服务器上想要的登录名即可。用户位于数据库内部,包括数据库权限。
master
登录名与服务器级别权限一起存在。如果要添加用户权限,需要在主数据库上完成。正如我所说,登录名存在,
master
因此在辅助副本上添加登录名没有问题,因为不需要将任何内容写入数据库。有多种用途。在您的情况下,它将允许使用 sysadmin 登录来访问数据库,而无需关联用户。