Що стосується Вашого оновлення:
Коли процес запускається, він має виділену область пам’яті, де зберігаються аргументи, та int, який повідомляє, скільки аргументів було передано.
MEMORY
argc 2
argv[0] program_name
argv[1] foo
argv[2] bar
MySQL перевіряє, чи був пароль переданий у командному рядку -p
, і якщо він був скопійований у нову змінну, яка не видно, то перезапишіть цю область пам'яті з x
'es.
Простими словами, наприклад:
argc 2
argv[1] -p
argv[2] p4ssw0rd
new_var = copy(argv[2]);
argv[2] = "xxxxx";
Ви можете знайти його, наприклад, у client/mysqladmin.cc
вихідному коді:
case 'p':
...
opt_password=my_strdup(argument,MYF(MY_FAE));
while (*argument)
*argument++= 'x'; /* Destroy argument */
Під час ps
запуску він зчитує область пам'яті аргументів, ( argv[N]
), і таким чином вона є xxxx
.
Дуже короткий час пароль видно, але лише протягом декількох циклів процесора.
Ви можете оновити пароль MySQL за допомогою спеціальної --init-file
опції та процедури. С.5.4.1.2. Скидання пароля Root: Unix Systems
mysqld_safe --init-file=/home/me/mysql-init &
Редагувати:
Як @Gilles сказати, що ви можете echo
,printf
або використовувати here
документ зі сценарію.
Ви також можете додати це .my.cnf
у свій домашній каталог або у ( тимчасовий ) файл та скористатися --defaults-extra-file
опцією. (Повірте, ви повинні додати цю опцію рано в командному рядку.) Необов’язково також включати користувача. Також відзначте додаткове ім'я опції, якщо ви не хочете використовувати лише цей файл як конфігурацію:
[client]
user=foo
password='password!'
shell> chmod 400 my_tmp.cnf
shell> mysql --defaults-extra-file=my_tmp.conf -...
Необов'язково [client]
групування робить mysqld
пропуск конфігурації.
Можна також використовувати MYSQL_PWD
змінну середовища, але це ніколи не слід використовувати, оскільки ви можете перераховувати середовище, у багатьох ps
реалізаціях ps -e
, у /proc/<PID>/environ
файлі на Linux тощо.
tr '\0' '\n' < /proc/<PID>/environ
Більше про тему тут .
Ви також можете подивитися на утиліту MySQL Configuration Utility, яка дозволяє зберігати пароль у зашифрованому файлі у вашому домашньому каталозі - .mylogin.cnf
.