В большинстве случаев для задания
пользователей и их паролей следует
пользоваться командой
GRANT, поэтому приведенная
ниже информация предназначена для
опытных пользователей. See
Раздел 4.3.1, «Синтаксис команд GRANT и REVOKE».
В примерах, приведенных в
предыдущих разделах,
демонстрируется важный принцип,
который заключается в следующем:
при сохранении непустых паролей с
использованием операторов
INSERT или UPDATE
для их шифрования должна
применяться функция
PASSWORD(). Это делается
потому, что в таблице user
пароли хранятся в зашифрованном
виде, а не как простой текст.
Предположим, что мы упустили это из
виду и задали пароли следующим
образом:
shell>mysql -u root mysqlmysql>INSERT INTO user (Host,User,Password)->VALUES('%','jeffrey','biscuit');mysql>FLUSH PRIVILEGES;
В результате выполнения этих
команд в таблице user будет
сохранено значение пароля
biscuit в виде простого
текста. Когда пользователь
jeffrey попытается
подсоединиться к серверу,
используя этот пароль, клиент
mysql зашифрует его при
помощи функции PASSWORD(),
сгенерирует вектор
аутентификации, основанный на
зашифрованном пароле и случайно
выбранном числе, полученном от
сервера, и направит результат на
сервер. Сервер использует значение
password из таблицы
user (в данном случае, это
незашифрованное значение
biscuit), чтобы осуществить
точно такие же вычисления, и
сравнит результаты. Результаты не
совпадут, и сервер не позволит
установить соединение:
shell> mysql -u jeffrey -pbiscuit test
Access denied
Перед занесением в таблицу
user пароли необходимо
зашифровывать, поэтому оператор
INSERT должен
использоваться следующим образом:
mysql>INSERT INTO user (Host,User,Password)->VALUES('%','jeffrey',PASSWORD('biscuit'));
При использовании оператора
SET PASSWORD также необходимо
применять функцию PASSWORD():
mysql> SET PASSWORD FOR jeffrey"%" = PASSWORD('biscuit');
Если пароль задается при помощи
оператора GRANT ... IDENTIFIED BY
или команды mysqladmin password,
нет необходимости использовать
функцию PASSWORD(). Обе эти
команды самостоятельно производят
шифровку пароля, поэтому пароль
следует указывать как
biscuit, например, таким
образом:
mysql> GRANT USAGE ON *.* TO jeffrey"%" IDENTIFIED BY 'biscuit';
или
shell> mysqladmin -u jeffrey password biscuit
Примечание: Функция
PASSWORD() шифрует пароли
отличным от Unix образом. Не следует
полагать, что если ваши пароли для
Unix и для MySQL совпадают, то функция
PASSWORD() выдаст точно такой
же результат шифрования, как и файл
паролей Unix. See Раздел 4.3.2, «Имена пользователей MySQL и пароли».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
