Что касается вашего обновления:
Когда процесс запускается, он имеет выделенную область памяти, где хранятся аргументы, и 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
опцию и процедуру. C.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
.