Em relação à sua atualização:
Quando um processo é iniciado, ele possui uma área dedicada de memória onde os argumentos são armazenados e um int que informa quantos argumentos foram passados.
MEMORY
argc 2
argv[0] program_name
argv[1] foo
argv[2] bar
O MySQL verifica se a senha foi passada na linha de comando por -p
, e se foi copiada para uma nova variável que não é visível, então sobrescreva aquela região da memória com x
'es.
Em termos simples, por exemplo:
argc 2
argv[1] -p
argv[2] p4ssw0rd
new_var = copy(argv[2]);
argv[2] = "xxxxx";
Você pode encontrá-lo, por exemplo em client/mysqladmin.cc
do código-fonte:
case 'p':
...
opt_password=my_strdup(argument,MYF(MY_FAE));
while (*argument)
*argument++= 'x'; /* Destroy argument */
Quando ps
é executado, ele lê a região de memória dos argumentos, ( argv[N]
) e, portanto, é xxxx
.
Por muito pouco tempo, a senha é visível, mas apenas por alguns ciclos de CPU.
Você pode atualizar a senha do MySQL usando a opção --init-file
e o procedimento especiais. C.5.4.1.2. Redefinindo a senha do root: Sistemas Unix
mysqld_safe --init-file=/home/me/mysql-init &
Editar:
Como @Gilles , você pode echo
, printf
ou use o documento here
de um script.
Você também pode adicionar isto a .my.cnf
do seu diretório pessoal ou em um arquivo ( temporário ) e usar o --defaults-extra-file
. (Acredite que você tem que adicionar essa opção no início da linha de comando.) opcionalmente, também inclui o usuário. Observe também o extra no nome da opção, a menos que você queira usar somente esse arquivo como configuração:
[client]
user=foo
password='password!'
shell> chmod 400 my_tmp.cnf
shell> mysql --defaults-extra-file=my_tmp.conf -...
Opcionalmente, o agrupamento [client]
faz com que mysqld
ignore a configuração.
Também é possível usar a variável de ambiente MYSQL_PWD
, mas isso deve nunca seja usado como você pode listar o ambiente, em muitas ps
implementações por ps -e
, no arquivo /proc/<PID>/environ
no Linux etc.
tr 'MEMORY
argc 2
argv[0] program_name
argv[1] foo
argv[2] bar
' '\n' < /proc/<PID>/environ
Mais sobre o tema aqui .
Você também pode querer dar uma olhada no Utilitário de configuração do MySQL que permite armazenar a senha em um arquivo criptografado em seu diretório inicial - .mylogin.cnf
.