Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Senha de banco de dados expirada e conexões ainda vivas


Se ocorrer uma expiração de senha de usuário no meio de uma conexão (sessão) já estabelecida, ele não encerrará uma sessão de usuário - a sessão não será encerrada automaticamente. O usuário poderá prosseguir e será solicitado (SQL*PLUS ou outras ferramentas) a alterar sua senha na primeira tentativa de login após a expiração. Que o comportamento certo. Deixe um usuário terminar o que ele já começou. Se você conseguir fechar uma conexão matando uma sessão de usuário logo após a expiração, provavelmente não fará isso limpo e o trabalho do usuário será perdido.

Editar

Primeiramente vamos definir a sessão e a conexão. A sessão é uma entidade lógica e a conexão é física. E uma conexão pode ter de 0 a n sessões estabelecidas nela (você pode testá-la usando sql*plus CLI e informações de v$process Visão). Assim, a expiração da senha se inclina mais para a sessão do usuário do que para a conexão e quando um usuário efetua logout, sua sessão deixa de existir, mas a conexão ainda pode ser estabelecida e fechada quando um aplicativo cliente é fechado.

Sim é possivel. se você tiver certeza absoluta de que um usuário ou um aplicativo fez seu trabalho e simplesmente esqueceu de fechar uma sessão, você pode usar alter system kill session <<SID>>, <<Serial_Number>> para matar (você tem que receber alter system privilege ) as sessões).

Você pode criar um perfil com IDLE_TIME opção especificada.
create profile <<Profile_name>> limit idle_time <<num_of_minutes>>

e atribua-o a um usuário. Quando o tempo de inatividade de uma sessão - o tempo em que uma sessão não está fazendo nenhuma chamada SQL excede <<num_of_minutes>> O Oracle reverterá a transação atual e encerrará essa sessão.

Você também pode configurar o encerramento de uma conexão que não está mais em uso definindo SQLNET.EXPIRE_TIME parâmetro , em minutos, no sqlnet.ora Arquivo.