Grande parte do meu problema foi usar conexões em pool - neste caso, mesmo quando nenhum relatório foi executado, as conexões foram mantidas vivas. Modifiquei minha string de conexão para ter o pool de conexões definido como false e verifique se há uma conexão de usuário aberta com seu banco de dados de relatórios em um loop até que o valor seja 0. Felizmente, não preciso criar o gatilho para rejeitar os usuários.