O que é uma alternativa segura para usar uma senha do MySQL na linha de comando?

31

Temos um script de linha de comando PHP para a versão de um banco de dados. Nós executamos este script sempre que um desenvolvedor adicionou um novo patch de banco de dados.

O script executa o patch com a linha de comando do MySQL:

system('mysql --user=xxx --password=xxx < patch.sql');

No entanto, o MySQL 5.6 agora emite o seguinte aviso:

Warning: Using a password on the command line interface can be insecure

O que é obviamente verdadeiro, mas pode ou não ser um problema para o usuário.

  • Qual é a alternativa segura ?
  • Como alternativa, é possível desativar esse aviso?

Por favor, note que eu não quero ter que confiar em um arquivo de senha externo.

    
por Benjamin 06.02.2013 / 22:48

4 respostas

16

Na versão recente do MySQL, isto é, versão 5.6 , você pode fazer isso através do comando mysql_config_editor, como descrito em link

Basicamente, o que ele faz é: criptografar suas credenciais de usuário / senha com um alias de host e, em seguida, usar o alias do host, colocar essas informações em um arquivo de configuração no diretório inicial e, quando necessário, em vez de fazendo algo como:

mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql

você escreve:

mysqldump --login-path=myhostalias mydatabase > dumpfile.sql

evitando assim colocar sua senha em algum script em texto não criptografado.

Para que isso funcione, primeiro você deve (apenas uma vez) definir myhostalias como:

mysql_config_editor set --login-path=myhostalias --host=mysqlhost.localnet.com --user=root --password

Você pode usar diferentes caminhos de login para diferentes contas e / ou hosts, conforme desejar. Muito boa ideia se você me perguntar.

Como nota, acredito, essa funcionalidade NÃO existe em qualquer versão abaixo de 5.6.

    
por 03.05.2013 / 19:01
9

Use a opção --defaults-file ou --defaults-extra-file . Você pode especificar o ID do usuário e a senha nele. Tem o mesmo formato que /etc/my.cnf .

Além disso, você diz que não quer depender de um arquivo de senhas externo, mas essa é a única maneira realmente segura. Qualquer outra coisa deixará vestígios na tabela de processos ou algo assim. Você pode até mesmo colocar o arquivo de senha no controle de versão, se você realmente quiser. Faça com que ele seja 600 (ou 400) e legível apenas pelo mysql ou pelo usuário que está sendo executado.

    
por 06.02.2013 / 23:10
4

Você tem 4 opções por link

  • Use uma opção -pyour_pass ou --password=your_pass na linha de comando
  • Use a opção -p ou --password na linha de comando sem nenhum valor de senha especificado. Nesse caso, o programa cliente solicita a senha interativamente:
  • Armazene sua senha em um arquivo de opções.
  • Armazene sua senha na variável de ambiente MYSQL_PWD

Para as suas necessidades, MYSQL_PWD pode ser uma opção, mas não é mais seguro. Realmente você deve gerar um processo interativo com --password e enviar a senha interativamente, mas isso é bastante complexo de uma solução para esse problema.

    
por 07.02.2013 / 02:37
3

Se o seu script PHP já tiver uma conexão de banco de dados aberta, por que você não usa apenas mysqli_multi_query() para importar o arquivo .sql? Se a sintaxe do arquivo .sql é válida, é claro ...

    
por 07.02.2013 / 02:46