Permitindo oráculo de login db só para aplicação específica?
-
06-07-2019 - |
Pergunta
Queremos permitir o acesso DB (Oracle) para nossos usuários somente através de nosso próprio aplicativo - vamos chamá-lo "ourTool.exe", instalado localmente nos computadores dos usuários. Atualmente, os usuários devem fornecer nome de usuário / senha sempre que iniciar "ourTool". A senha senha fornecida é descriptografado e usamos username / descodificada por senha para finalmente fazer login no banco de dados Oracle. Esta abordagem impede que os usuários acessem diretamente o nosso DB usando ferramentas de terceiros (SQLPlus, Excel, Access, ...) e tudo no DB é garantido que foram introduzidos / editados usando "ourTool".
Agora, um dos nossos clientes quer para permitir que seus usuários "single sign-on" (com SmartCards / Oracle PKI). Com isso, o usuário poderá se conectar ao nosso DB sem fornecer qualquer senha cada vez que eles começam a "ourTool". Mas o mesmo será verdade para as ferramentas potencialmente perigosas como SQLPlus, Excel, Access, etc.
Existe uma maneira para evitar isso? Como podemos ter certeza de que cada registro na nossa DB só é criado / editado / excluído usando "ourTool" neste cenário?
Solução
Uma vez que é a sua aplicação e você tem o controle da fonte, você pode usar qualquer senha protegeu papéis de banco de dados ou funções de aplicação segura que estão habilitados a partir ourTool.exe. (Veja http://www.oracle.com/technology/ obe / obe10gdb / security / approles / approles.htm ).
Por exemplo, com um papel de banco de dados protegido por senha, a conexão inicial seria apenas com o privilégio CREATE SESSION, e depois ourTool.exe iria emitir o PAPEL SET com a senha que só você conheça. Qualquer outra aplicação não tem a informação para definir o papel. Obviamente, os privilégios são concedidos apenas para o papel e não diretamente para o usuário com essa configuração.
Outras dicas
Por padrão, OCI
transmite o nome EXE
aplicativo de chamada e você pode acessá-lo por meio de consulta v$session
:
SELECT program
FROM V$SESSION
, o que você pode fazer em um gatilho AFTER LOGON
.
Mas isso pode ser facilmente anulado e não deve ser invocado.
Eu renomeado meu sqlplus.exe para myTool.exe e depois de fazer uma conexão com myTool.exe
SELECT program
FROM V$SESSION
where username = 'SYSTEM';
Retorna: myTool.exe
Então, estar ciente, como disse Quassnoi:., Embora útil em algumas circunstâncias, certamente não é prova bullit