Existe uma maneira segura de executar múltiplos comandos CLI do MySQL sem ter que pedir uma senha ao usuário?

1

Eu tenho um script bash que executa um monte de comandos MySQL, separados por entrada do usuário.

Sempre que uma consulta é executada, a senha deve ser reinserida.

Eu entendo que é melhor evitar colocar a senha na linha de comando, então eu tenho medo de perguntar ao usuário a senha e, em seguida, transmiti-la na linha de comando para cada comando.

Existe uma maneira recomendada de fazer isso sem comprometer a segurança?

    
por Ben Holness 12.04.2018 / 00:09

5 respostas

1

Você pode armazenar as credenciais em ~/.my.cnf file . O Mysql procurará este arquivo por padrão e usará as credenciais especificadas nele, se nenhuma outra credencial for especificada no comando.

    
por 12.04.2018 / 05:23
0

Eu não tenho um servidor MySQL para testar, mas você deve ser capaz de

  1. solicite a senha uma vez,
  2. crie um canal nomeado ,
  3. associe isso a um plano de fundo mysql process e
  4. passa todo o SQL para o pipe nomeado.
por 12.04.2018 / 00:27
0

É melhor não manipular senhas em scripts de shell.

Eu tive uma pergunta semelhante:

link

Eu tomei a decisão de usar um script de shell como um wrapper para um script de expectativa - com base no meu caso de uso.

Não é perfeitamente seguro (o que é?), mas:

  1. a senha não é revelada via ps.
  2. a senha não está codificada em nenhum lugar.
  3. a senha não é longa em RAM - os termos do processo em 30s.
  4. a senha é para uma conta sem privilégios
  5. o script é executado como uma conta sem privilégios
  6. root é bloqueado para um pequeno grupo de funcionários nessa caixa.
  7. a caixa que executa esse comando é interna e endurecida

É "seguro"? É segurança suficiente para a minha situação.

Muitos documentos sobre como executar o shell script com segurança. Aqui está um:

link

Considere também: link

    
por 12.04.2018 / 00:22
0

Em vez de ter o MySQL -u root -pPASSWORD, tenha isto: 'mysql —defaults-file = /etc/mysql/debian.cnf que usará o debian sys maint user

    
por 13.04.2018 / 00:12
0

Você pode armazenar a entrada do usuário (a senha) em uma variável e passá-la como um parâmetro para a CLI do MySQL. Isso não é ruim. Isso não compromete a segurança.

Como usuário, quando você está digitando comandos, eles são colocados no ~/.bash_history em texto sem formatação. Portanto, como usuário, se você passar a senha como um parâmetro, ela será armazenada em um arquivo na máquina. Isso não é pior do que armazenar a senha em um arquivo de configuração.

Fazer o usuário digitar a senha repetidamente é irritante do ponto de vista do UX. Salvá-lo em uma variável e transmiti-lo ao comando é muito melhor sem comprometer a segurança.

Vale a pena notar que isso exporia a senha na lista de processos enquanto cada um dos comandos do MySQL estiver sendo executado.

    
por 20.04.2018 / 13:21