Um dos bancos de dados físicos em espera em meu ambiente está aberto no modo somente leitura e usado para fins de geração de relatórios.
Quero dar aos usuários acesso apenas a esse modo de espera específico, não ao banco de dados principal.
A melhor abordagem que encontrei até agora é criar um AFTER LOGON ON DATABASE
gatilho que verifica v$instance
(ou talvez v$database
) e lança um erro para depender dos valores de host_name
/ instance_role
colunas .
Eu me pergunto se há uma maneira melhor de fazer isso.
Você poderia fazer um firewall do sistema operacional no lado da produção, mas isso não funcionaria se eles precisassem de produção para fins mais limitados.
Um gatilho de banco de dados após o logon funcionaria, mas infelizmente também teria que ser executado no primário para desconectar as sessões lá.
Você pode fazer parte de seus procedimentos alterar a senha do usuário principal que eles usarão para conectar o modo de espera imediatamente após o modo de espera ser aberto como somente leitura, mas antes que os usuários sejam notificados sobre a nova senha. Dessa forma, eles poderão se conectar ao modo de espera, mas não poderão se conectar ao principal. A senha recém-definida para o primário seria a senha que você entregou a eles após a próxima abertura do modo de espera.
Você pode habilitar o usuário antes que o modo de espera seja aberto e, em seguida, desativá-lo imediatamente antes que os usuários sejam notificados de que o modo de espera está aberto. Isso permitiria que a senha permanecesse a mesma, mas introduz uma janela de vulnerabilidade que você pode atenuar se tiver uma janela de interrupção no primário e puder desativar o ouvinte ou algo assim.
Você pode configurar uma entrada TNS que aponte apenas para o modo de espera somente leitura para que as ferramentas/usuários de relatórios se conectem. É mais simples de administrar do que um gatilho, especialmente se esse modo de espera precisar se tornar primário para qualquer finalidade. O acionador do banco de dados de logon seria outra etapa no processo antes que os serviços pudessem usar o banco de dados funcionalmente.
Por novos requisitos líquidos nos comentários: Esta solução não é válida.