4.3. Управление учетными записями пользователей MySQL
4.3.7. Задание паролей
В большинстве случаев для задания пользователей и их паролей следует пользоваться командой GRANT , поэтому приведенная ниже информация предназначена для опытных пользователей. See Раздел 4.3.1, «Синтаксис команд GRANT и REVOKE ».
В примерах, приведенных в предыдущих разделах, демонстрируется важный принцип, который заключается в следующем: при сохранении непустых паролей с использованием операторов INSERT или UPDATE для их шифрования должна применяться функция PASSWORD() . Это делается потому, что в таблице user пароли хранятся в зашифрованном виде, а не как простой текст. Предположим, что мы упустили это из виду и задали пароли следующим образом:
shell> mysql -u root mysql
mysql> 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 и пароли».
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|