Этот метод порождает проблему, заключающуюся в том, что понятный текстовый пароль остается в протоколе или хронологии (history) вашей командной оболочки и может просматриваться кем угодно с помощью команды ps
$ 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 точкой с запятой (;
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> 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