При необходимости перезагрузки таблиц разрешения, для восстановления первона­чальных настроек выполните следующее:
1. Если сервер запущен, остановите его:
[rootohost] $ /usr/local/mysql/support-files/mysql.server stop
2. Перейдите в каталог инсталляции MySQL и удалите папку mysql/. Поскольку базы данных в MySQL представлены в виде каталогов файловой системы, при этом будут удалены таблицы разрешений:
[rootohost] $ rm - rf /usr/local/mysql/data/mysql
3. В системе UNIX переинсталлируйте таблицы разрешения с помощью сценария инициализации mysql_install_db:
[rootohost]# /usr/local/mysql/scripts/mysql_install_db 
А поскольку этот сценарий не является частью двоичного дистрибутива в ОС Windows, для того что бы восстановить таблицы разрешений, вам придется пе­реинсталлировать этот пакет в тот же самый каталог.
4. Если у вас ОС UNIX, вернитесь в каталог данных инсталляционного каталога MySQL, а также измените владельца вновь созданного каталога MySQL, чтобы он принадлежал пользователю mysql:
[rootohost] # chown -R mysql.mysql /usr/local/mysql/data/mysql
5. Перезагрузите сервер:
[rootohost] $ /usr/local/mysql/support-files/mysql.server stop
Таблицы MySQL будут перезагружены и возвращены в первоначальное состояние. Теперь можно зарегистрировать суперпользователя и внести изменения, применяя ко­манды REVOKE и GRANT.

Изменение пароля пользователя
При добавлении пользователя в таблицу user командой GRANT, MySQL позволяет задать пароль этого пользователя параметром IDENTIFIED BY. Этот пароль должен вводиться каждый раз, когда пользователь заходит в систему для получения доступа к базе данных. Если вы используете программу mysql, пароль и имя пользователя можно задавать в командной строке после аргументов -u и -p.
Листинг 14.53.
[userohost] $ mysql -h localhost -u logger -p
Enter password: ****** Welcome to the MySQL monitor ...
Если же вы не хотите вводить пароль по подсказке (т.е. при использовании неинтерак­тивной связи по сценарию), пароль можно задать в командной строке после аргумента -p.
Листинг 14.54.
[userohost] $ mysql -h localhost -u logger -ptimber
Welcome to the MySQL monitor ...
Пароль хранится в поле Password в таблице user базы данных MySQL, и он должен быть зашифрован функцией MySQL PASSWORD(), как в следующем примере.
Листинг 14.55.
mysql> INSERT INTO user (Host, User, Password) VALUES ('melonfire.net', 'timothy', PASSWORD ('1r0ck'));
mysql> UPDATE user SET Password = PASSWORD ('1r0ck') WHERE Host = 'melonfire.net' AND User = 'timothy';
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)
Кроме того, пароль может быть задан командой MySQL SET PASSWORD. Рассмотрим новый пример, который во всем аналогичен предыдущему.
Листинг 14.56.
mysql> SET PASSWORD FOR timothy@melonfire.net = PASSWORD ('1r0ck'); 
При назначении пароля командой GRANT с использованием предложения IDENTIFIED BY или посредством утилиты mysqladmin, вам не надо зашифровывать пароль. Команда GRANT и утилита mysqladmin автоматически сделают это за вас.
Листинг 14.57.
mysql> GRANT USAGE ON *.* TO timothy@melonfire.net IDENTIFIED BY '1r0ck';
Первый описанный нами метод предполагает наличие привилегии FLUSH, но вообще его применять не рекомендуется.
Использование предложения IDENTIFIED BY в команде GRANT намного предпочти­тельнее. Создание нового пользователя с помощью команды GRANT без применения этого предложения, приведет к отправке ему пустого пароля. В результате возникнет брешь в системе защиты, поэтому администраторы должны очень хорошо помнить о необходи­мости создания паролей для новых пользователей.
Безопасность превыше всего!
В инструкции MySQL рекомендуется не вводить пароль в командной строке, после опции -p, а вводить его по подсказке, тогда он будет маскироваться при вводе. Это существенно уменьшает риск использования пароля другими пользователями.

Избавляемся от старого!
Функция PASSWORD() в версии MySQL 4.1 и более поздних, генерирует 41-битовое значение, которое не совместимо со старыми версиями (в которых используются 16-битовые значения). Поэтому после обновления сервера MySQL до версии 4.1 и более поздних вам придется запустить сценарий fix_priviledge_table из ин­сталляционного каталога scripts/, что позволит в дальнейшем оперировать длин­ными значениями паролей.
Когда пользователь, заходя на сервер, вводит пароль, то первое, что делает система MySQL, - это кодировка его пароля с использованием функции PASSWORD. А потом она сопоставляет значение ввода со значением в поле Password, в соответствующей записи таблицы user. Если все правильно, доступ к базе данных разрешается. Иначе в доступе будет отказано.