Temos um script de linha de comando PHP para a versão de um banco de dados. Executamos esse script sempre que um desenvolvedor adiciona 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:
Aviso: o uso de uma senha na interface da linha de comandos pode ser inseguro
O que é obviamente verdade, mas pode ou não ser um problema para o usuário.
- Qual é a alternativa segura, então?
- Como alternativa, é possível desativar esse aviso?
Observe que eu não quero depender de um arquivo de senha externa.
mysql
php
command-line-interface
Benjamin
fonte
fonte
Respostas:
Na versão GA recente do MySQL, ou seja, versão 5.6 , você pode fazer isso através do comando mysql_config_editor, conforme descrito em http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
Basicamente, o que ele faz é: criptografar suas credenciais de usuário / senha com um alias de host e, em seguida, você usa o alias de host, coloca essas informações em um arquivo de configuração no diretório inicial e, quando necessário, em vez de fazer algo como :
você escreve:
evitando assim colocar sua senha em algum script em texto não criptografado.
Para que isso funcione, você deve primeiro (apenas uma vez) definir
myhostalias
como:Você pode usar diferentes caminhos de login para diferentes contas e / ou hosts, conforme desejar. Boa ideia se você me perguntar.
Como uma nota, acredito, essa funcionalidade NÃO existe em nenhuma versão abaixo da versão 5.6.
fonte
mysql_config_editor
, para que infelizmente não traga muito mais valor. Também estou tentando evitar que o desenvolvedor o faça manualmente, mantendo assim o arquivo de configuração do PHP e a configuração do mysql.Use a opção
--defaults-file
ou--defaults-extra-file
. Você pode especificar o ID do usuário e a senha. Tem o mesmo formato que/etc/my.cnf
.Lendo mais, você diz que não deseja confiar em um arquivo de senha externo, mas essa é a única maneira realmente segura. Qualquer outra coisa deixará rastros na tabela de processos ou algo assim. Você pode até colocar o arquivo de senha no controle de versão, se realmente quiser. Torne 600 (ou 400) e legível apenas pelo mysql ou pelo usuário sob o qual ele está sendo executado.
fonte
mysql --defaults-file c:\some\dirs\my.cnf
mysql
cliente do console?Você tem 4 opções por http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html
-pyour_pass
ou--password=your_pass
na linha de comando-p
ou--password
na linha de comandos sem nenhum valor de senha especificado. Nesse caso, o programa cliente solicita a senha interativamente:MYSQL_PWD
variável de ambientePara suas necessidades,
MYSQL_PWD
pode ser uma opção, mas não é mais segura. Realmente, você deve gerar um processo interativo--password
e enviar a senha interativamente, mas essa é uma solução bastante complexa para esse problema.fonte
man ps
tem-E Display the environment as well.
a partir do URL que eu ligado: Este método de especificar sua senha MySQL deve ser considerado extremamente inseguro e não deve ser utilizado. Algumas versões do ps incluem uma opção para exibir o ambiente dos processos em execução. Em alguns sistemas, se você definir MYSQL_PWD, sua senha será exposta a qualquer outro usuário que execute ps. Mesmo em sistemas sem essa versão do ps, não é aconselhável supor que não haja outros métodos pelos quais os usuários possam examinar os ambientes de processo.ps
e ver o argumento da linha de comando para cada processo de cada usuário. Masps e
apenas exibe o ambiente para seus próprios processos (a menos que você seja root, é claro). É apenas um pouco mais seguro, mas ainda é mais seguro.Se o seu script PHP já possui 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 for válida, é claro ...fonte