Eu realmente não tenho experiência com bancos de dados Oracle (ou bancos de dados), mas parece que uma solução Perl é possível com o Oracle Wallet como mostrado aqui (termos de pesquisa do Google" login sem senha do banco de dados Oracle ").
Eu estou querendo saber se é aceitável (em termos de segurança) ter credenciais de login do banco de dados (user / pass) definidas em uma variável de ambiente ou transmitidas como um parâmetro de linha de comando?
Ambos os métodos parecem arriscados para mim, pois talvez outros possam ler a variável de ambiente ou ler os processos / histórico em execução e as credenciais estariam lá em texto simples (O meu entendimento está correto aqui?)
Qual seria uma maneira aceitável de fazer esse login? Ele seria executado em um script como parte de um trabalho / processo automatizado.
Edit: Este é um banco de dados Oracle (11g)
Editar # 2: o Oracle Wallet foi considerado em um ponto, mas ainda não pode ser usado onde eu trabalho.
Eu realmente não tenho experiência com bancos de dados Oracle (ou bancos de dados), mas parece que uma solução Perl é possível com o Oracle Wallet como mostrado aqui (termos de pesquisa do Google" login sem senha do banco de dados Oracle ").
Parâmetros de linha de comando podem ser lidos por qualquer pessoa via /proc/<pid>/cmdline
. Para processos que saem imediatamente, eles ainda podem ser mostrados para alguém que usa um programa de monitoramento semelhante a ps
.
As senhas na memória, por outro lado, não devem ser o problema. A memória não pode ser acessada sem direitos de superusuário, e um software seguro geralmente substitui as senhas na memória antes de liberá-las para outros processos.
A maneira mais comum é usar permissões de arquivo. A senha entra em um arquivo que só pode ser lido por quem é suposto poder. Assim, as credenciais como um arquivo (seja uma chave ou senha) estão protegidas contra vazamentos comuns no cmdline.
As melhores práticas determinam que você não deve armazenar senhas em texto sem formatação no disco ou na memória. Variáveis de ambiente também são problemáticas. Imagine se um sistema de produção estivesse executando um programa de monitoramento que faz "ps auxwwe" periodicamente e grava a saída em um arquivo de log. Suas credenciais do sqlplus seriam inadvertidamente gravadas nos registros do monitor, que podem ser legíveis para o mundo. O cenário mais comum seria o envio dos logs para o Splunk / ElasticSearch / Hadoop / Loggly.
Eu escrevi um programa que comunica as credenciais de forma segura por meio de fluxos de arquivos aqui: link
Uma vez que as credenciais foram enviadas para o programa sqlplus, o safe_sqlplus zera a parte da memória onde elas estavam armazenadas.
Você precisa separar a linha de comando que abre seu cliente de banco de dados e o envio de passwd. Naturalmente, diferentes RDBMSs / clientes funcionarão de forma diferente. Aqui está um exemplo para sqlplus
(utilitário de linha de comando ORCL padrão):
sqlplus /nolog<<!!
connect $USER/$PASSWD@$SID;
...
--some SQL
...
!!
se você fizer isso, ps
não mostrará o passwd na lista de processos.