Estamos configurando um grupo de disponibilidade com uma réplica secundária legível. Um logon pode se conectar à réplica secundária usando "ApplicationIntent=ReadOnly" em sua cadeia de conexão. Mas nos deparamos com um problema que pode fazer nossa dor de cabeça no futuro.
Se a réplica secundária estiver indisponível devido a qualquer causa quando o logon estabelecer a conexão, esse logon será direcionado para a réplica primária, independentemente de estar usando "ApplicationIntent=ReadOnly" ou não.
Então, minha pergunta - existe alguma maneira de proibir logins específicos de se conectarem à réplica primária se eles estiverem configurados para trabalhar com a secundária?
Quero dizer, se a réplica primária não puder direcionar a conexão para a secundária, a conexão deve ser fechada em vez de continuar trabalhando na réplica primária.
Microsoft SQL Server 2016 (SP2-CU1) (KB4135048) - 13.0.5149.0 (X64) 19 de maio de 2018 09:41:57 Copyright (c) Microsoft Corporation Enterprise Edition: licenciamento baseado em núcleo (64 bits) no Windows Server 2016 Standard 10.0 (Construção 14393: )
Você pode configurar isso definindo a configuração "Conexões na função primária" ao configurar o roteamento somente leitura . Você tem 2 opções:
Essa configuração não está configurada no nível de login - isso depende do que você disse na primeira parte da sua pergunta, que seus logins estão usando ApplicationIntent=ReadOnly em sua string de conexão.
Se eles não pedirem isso especificamente - ou seja, se eles não declararem que vão apenas escrever - então o SQL Server não tem uma maneira rápida de saber que eles não têm permissões graváveis em nenhum banco de dados, em nenhum objeto. Afinal, eles podem até executar um procedimento armazenado assinado com um certificado, e esse certificado pode permitir que eles façam gravações.
Portanto, se você realmente deseja impedir que eles façam login, mesmo que não usem ApplicationIntent=ReadOnly, eu faria isso simplesmente desabilitando seus logins no primário. Em seguida, execute um trabalho de agente a cada minuto em cada réplica, verificando se essa réplica específica é primária. Se ocorreu um failover e esta réplica agora é primária, desabilite os logons somente de relatório. Se a réplica for secundária e os logons somente de relatório estiverem desabilitados, habilite-os.
É claro que isso terá problemas se você realmente quiser desativar o login de alguém - ele será ativado instantaneamente novamente em um minuto.