Этот метод порождает проблему, заключающуюся в том, что понятный текстовый пароль остается в протоколе или хронологии (history) вашей командной оболочки и может просматриваться кем угодно с помощью команды ps
во время выполнения вашей команды или может быть извлечен из протокола команды. Лучше еще раз применить монитор MySQL на этот раз для отправки нескольких команд на языке SQL, которые изменят ваш пароль.
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Type 'help;' or '\h' for help. Type ' \c' to clear the buffer.
mysql> SET password=PASSWORD('secretpassword');
Query OK, 0 rows affected (0.00 sec)
Конечно же, выберите пароль, известный только вам, а не пример "secretpassword", использованный нами в данном случае для того, чтобы показать, куда вводить ваш собственный пароль. Если вы когда-нибудь захотите удалить пароль, можно просто задать пустую строку на месте "secretpassword", и пароль будет удален.
Обратите внимание на то, что мы завершаем команды на языке SQL точкой с запятой (;
). Строго говоря; она не является частью команды SQL, а применяется для того, чтобы сообщить программе-клиенту MySQL о том, что наша команда SQL готова к выполнению. Мы также пользуемся прописными буквами для ввода ключевых слов языка SQL, например, SET
. Это не обязательно, потому что действительный синтаксис MySQL допускает ввод ключевых слов как прописными, так и строчными буквами, но мы применяем первый вариант как принятое соглашение в данной книге и в нашей повседневной работе, т.к. считаем, что это облегчает чтение команд SQL.
Теперь рассмотрим таблицу прав доступа, чтобы убедиться в том, что пароль установлен. Сначала с помощью команды use переключитесь на базу данных mysql и затем запросите внутренние таблицы:
mysql> use mysql
mysql> SELECT user, host, password FROM user;
+------+-----------+------------------+
| user | host | password |
+------+-----------+------------------+
| root | localhost | 2dxf8e9c23age6ed |
| root | fc7blp4e | |
| | localhost | |
| | fc7blp4e | |
+------+-----------+------------------+
4 rows in set (0.01 sec) mysql>
Отметьте, что вы создали пароль для пользователя root, только когда подключились с компьютера localhost
. MySQL может хранить права доступа не только для пользователей, но и для классов соединений (connection classes), основанных на имени узла. Следующим шагом в защите вашей установки будет удаление ненужных пользователей, устанавливаемых MySQL по умолчанию. Приведенная далее команда удаляет из таблицы прав доступа всех пользователей с именами, отличающимися от root.
mysql> DELETE FROM user WHEREuser != 'root';
Query OK, 2 rows affected (0.01 sec)
Следующая команда удаляет все регистрации с машин, отличных от компьютера localhost
.
mysql> DELETE FROM user WHEREhost != 'localhost';
Query OK, 1 row affected (0.01 sec)
И последнее, примените следующую команду для того, чтобы убедиться в отсутствии случайных регистраций:
mysql> SELECT user, host, password FROM user;
+------+-----------+------------------+
| user | host | password |
+------+-----------+------------------+
| root | localhost | 2dxf8e9c23age6ed |
+------+-----------+------------------+
1 row in set (0.00 sec) mysql> exit