我们正在配置一个具有可读辅助副本的可用性组。登录名可以使用其连接字符串中的“ApplicationIntent=ReadOnly”连接到辅助副本。但是我们遇到了一个可能让我们将来头疼的问题。
如果在登录建立连接时由于任何原因导致次要副本不可用,则无论是否使用“ApplicationIntent=ReadOnly”,此登录都将定向到主要副本。
所以,我的问题 - 如果特定登录配置为与辅助副本一起使用,是否有任何方法可以禁止特定登录连接到主副本?
我的意思是,如果主副本无法将连接定向到辅助副本,则应关闭连接而不是继续在主副本上工作。
Microsoft SQL Server 2016 (SP2-CU1) (KB4135048) - 13.0.5149.0 (X64) 2018 年 5 月 19 日 09:41:57 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows Server 2016 Standard 上基于内核的许可(64 位) 10.0(内部版本 14393:)
您可以通过在配置只读路由时设置“主要角色中的连接”设置来配置它。您有 2 个选择:
虽然此设置未在登录级别配置 - 这取决于您在问题的第一部分中所说的内容,即您的登录在其连接字符串中使用 ApplicationIntent=ReadOnly。
如果他们没有特别要求——也就是说,如果他们没有声明他们只会写——那么 SQL Server 就没有快速的方法知道他们在任何数据库、任何对象上都没有可写权限。毕竟,他们甚至可以执行使用证书签名的存储过程,并且该证书可以允许他们进行写入。
因此,如果您真的想阻止他们登录,即使他们不使用 ApplicationIntent=ReadOnly,那么我会通过简单地禁用他们在主服务器上的登录来做到这一点。然后,每分钟在每个副本上运行一个代理作业,检查这个特定的副本是否是主副本。如果发生故障转移,并且此副本现在是主要副本,请禁用仅报告登录。如果副本是辅助副本,并且禁用了仅报告登录,则启用它们。
如果您真的想禁用某人的登录,这当然会遇到问题 - 它会在一分钟内立即再次启用。