Opa : então, primeiro eu sou ** obrigado ** a te dizer que restringir acesso
por ferramenta cliente é algo que o RDBMS Oracle absolutamente Não Prevê : o
fato é que o RDBMS tá pouco se lixando pra qual ferramenta vc usou pra exercer
seu direito de conexão no database (a preocupação dos desenvolvedores do RDBMS
Oracle é em comprovar que vc tem direito a acessar o database, com o que vc vai
acessar não importa pra ele), E além disso numa aplicação moderna tipicamente o
RDBMS ** nem sequer ENXERGA a máquina do usuário-final (pois ele conecta num
pool de conexões, e não diretamente ao database)... Ademais, o database NÂO
CONTROLA quais programas estão solicitando conexão, assim depende TOTALMENTE da
informação que o programa-cliente dá : Assim sendo, se vc montar um trigger
que faça um IF nomedoprogramaconectando = 'SQLPLUS.EXE' , para isso ser burlado
basta o usuário RENOMEAR o arquivo SQLPLUS.EXE para OUTRACOISA.EXE... :)
Segundo ponto : normalmente quando a pessoa quer restringir o acesso ao
database apenas pela Aplicação, isso indica que se o usuário acessar por fora
há Risco de "quebra" de integridade/segurança - tipicamente, há alguma regra de
negócio e/ou alguma Integridade de dados que ao invés de ser mantida DENTRO DO
DATABASE (caso em que a validação SEMPRE ocorre, independente de qquer coisa)
neguim criou a tal regra/validação/integridade DENTRO DA APLICAÇÃO, aí se
acessar o banco fora da aplicação é kaput... Se for esse o seu motivo, pense **
seriamente ** em tornar a sua aplicação DATABASE-centric, passando as tais
regras/validações para dentro do database, que é onde elas Pertencem... Sempre,
o que se refere a DADOS fica necessariamente DENTRO DO DATABASE...
Mas se ainda assim vc quiser ter um trigger de LOGON que faça isso, veja o
exemplo em
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:561622956788
...
Agora : imho muito mais Efetivo (se é que essa palavra cabe num
quebra-galho/gambi do tipo implícito em tasks estranhas como bloquear acesso
por tool cliente) seria OU vc não dar Acesso às tabelas da Aplicação se a
pessoa não conectar pela aplicação (digamos, há uma trigger
WHEN-NEW-FORM-INSTANCE que faz um ALTER SESSION que libera o acesso às tabelas
ativando uma ROLE, ou popula um context que vai ser exigido numa política de
FGA que vc criou no database, algo do tipo), OU então vc fazer o controle após
o fato, ie : ter um job de banco que de minuto em minuto dispara e mata as
sessões que não setaram algum valor predeterminado via DBMS_APPLICATION_INFO ou
alguma coisa assim que as tools clientes não fazem e vc programaria tua
aplicação para fazer
[]s
Chiappa