Аутентификация, как было сказано в предыдущем сообщении, – процедура проверки подлинности пользователя при его коннекте к базе данных. В MySQL при аутентификации проверяется существование такого пользователя (username), разрешено ли ему коннектиться с данного хоста (hostname) и правильность введенного им пароля (password). Т.е. аккаунт пользователя в MySQL состоит из имени пользователя и клиенткого хоста, откуда будет осуществляться коннект.
Создание пользователя в MySQL.
Для создания пользователя в MySQL используется команда CREATE USER … IDENTIFIED BY. Например, следующая команда создаст пользователя jane с паролем abc123 для коннекта с localhost:
CREATE USER jane@localhost IDENTIFIED BY ‘abc123’;
В командах SQL аккаунт пользователя имеет следующий формат: ‘user_name’@’host_name’. Обратите внимание, что кавычки ставятся отдельно для user_name и host_name. В случае, если в имени пользователя и хоста нет специальных символов, их можно опустить. Но лично я предпочитаю всегда пользоваться кавычками. Ниже приведены примеры, как можно задать имя пользователя и хост.
jane@192.168.10.10
jane@’192.168.10.%’
jane@’%.example.ru’
jane@’192.168.10.0/255.255.255.0′
Для заведения анонимного пользователя (имя пользователя может быть произвольным) user_name в аккаунте пользователя оставляют в виде пустой строки:
mysql>CREATE USER ‘ ‘@localhost;
Для обычных случаев не рекомендуется создавать анонимных пользователей, особенно с пустым паролем, как показано в примере выше. Также не рекомендуется заводить пользователей без пароля.
Вся информация о пользователях хранится в базе данных mysql, которая создается автоматически при инсталляции MySQL сервера. Используя команды SELECT, эту информацию можно при необходимости посмотреть.
Установка пароля пользователя в MySQL.
Существует несколько способов установить пароль пользователя в MySQL:
- CREATE USER … IDENTIFIED BY;
- GRANT … IDENTIFIED BY;
- SET PASSWORD;
- mysqladmin password;
- UPDATE grant tables (не рекомендуется пользоваться этим способом).
Для того, чтобы исключить возможность вносить изменения в grant tables напрямую, необходимо сразу после инсталяции MySQL установить пароль у пользователя root и разрешить ему доступ только с необходимых хостов. Я, как правило, разрешаю доступ пользователю root в MySQL только локально с сервера.
Наиболее распространенный способ для смены пароля аккаунта (без предоставления дополнительных привилегий) – использовать команду SET PASSWORD. Например, чтобы установить пароль пользователю jane с localhost используется следующая команда:
mysql>SET PASSWORD FOR jane@localhost = PASSWORD(‘newpassword’);
Все неанонимные пользователи могут сменить свой собственный пароль командой:
mysql>SET PASSWORD = PASSWORD(‘newpassword’);
Обратите внимание на отличие в механизме работы команд SET PASSWORD и CREATE USER…IDENTIFIED BY. В первом случае используется функция PASSWORD(), возвращающая hash строки пароля, во втором случае вводится строка пароля в чистом виде.
Проверка паролей в MySQL.
Очень важно, чтобы пароли в MySQL для всех пользователей были не слишком простыми (соответственно, пустые пароли надо полностью исключить) и уникальными.
Проверить отсутствие пустых паролей можно при помощи команды SELECT:
SELECT Host, User FROM mysql.user WHERE Password = ‘ ‘;
А следующий пример показывает, как искать пользователей с одинаковыми паролями:
SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;
Для того, чтобы выполнить вышеуказанные запросы необходимо иметь права на чтение схемы mysql или таблицы mysql.user.
Переименование и удаление пользователей в MySQL.
Для переименования пользователей в MySQL используется команда RENAME USER. Например:
RENAME USER ‘jane’@’localhost’ TO ‘jim’@’localhost’;
Как видно из примера, в аккаунте можно изменить имя пользователя (username), или имя хоста (hostname), илт оба вместе.
Удаление пользователя осуществляется командой DROP USER. Например:
DROP USER ‘jane’@’localhost’;
Эта команда удаляет все привилегии у данного аккаунта, после чего удаляется и сам аккаунт. Удаляет все записи, связанные с этим аккаунтом из словаря данных (всех grant table).