Considerando que o acesso é remoto das máquinas, você pode estabelecer conexão por perfil do usuário.
Uma tabela chamada algo como “monitoramento_login” irá monitorá os logins que estão em uso, no momento.
A ideia de usar login flutuante, que wbdsjunior sugeriu é bem interessante, e a considero mais justa tanto para o cliente quanto para o fornecedor.
Mas voltando… nessa tabela, você registraria o login e a hora de acesso, inicialmente. E as consultas à ela seriam feitas em três situações:
1 - Quando um usuário tenta-se logar no sistema, verificava se já tinha registro com o mesmo login, caso tivesse, barrava o acesso;
2 - Quando o usuário deslogasse do sistema, apagava o registro pelo login do usuário que deslogou para liberar futuro acesso;
3 - A cada X tempo, pois evitaria “locks” de usuários. A cada 5 min, 2, 3, sei lá, uma thread ou até mesmo uma rotina de scheduler iria à tabela verifica qual foi o último acesso do usuário. Essa rotina serveria com um “tick” marcando a hora de atualização a cada X minutos, se houvesse alguma falha no sistema, a hora não seria marcada e quando o usuário tentasse logar novamente o sistema iria saber se foi desligado por falha ou não. A outra opção para esse caso seria criar um bootstrap, para sempre apagar os registros dessa tabela quando o servidor fosse inicializado.