8.2.14 Назначение паролей учётных записей
Требуемые учетные данные для клиентов, подключающихся к серверу MySQL, могут включать пароль. В этом разделе описывается, как назначить пароли для учетных записей MySQL.
MySQL хранит учетные данные в таблице user в базе данных системы mysql. Операции по назначению или изменению паролей разрешены только пользователям с привилегией CREATE USER или, альтернативно, привилегиями для базы данных mysql (INSERT для создания новых учётных записей, UPDATE для изменения существующих учётных записей). Если системная переменная read_only включена, использование утверждений изменения учетных записей, таких как CREATE USER или ALTER USER, дополнительно требует привилегию CONNECTION_ADMIN (или устаревшую привилегию SUPER).
Данное обсуждение резюмирует синтаксис только для наиболее распространённых утверждений назначения паролей. Полные сведения об остальных возможностях см. в разделе 15.7.1.3, «Утверждение CREATE USER», разделе 15.7.1.1, «Утверждение ALTER USER» и разделе 15.7.1.10, «Утверждение SET PASSWORD».
MySQL использует плагины для выполнения аутентификации клиентов; см. раздел 8.2.17, «Подключаемая аутентификация». В утверждениях назначения паролей плагин аутентификации, связанный с учётной записью, выполняет любые хеширования, требуемые для текстового пароля, указанного явно. Это позволяет MySQL защищать пароли перед их хранением в таблице системы mysql.user. Для описанных здесь утверждений MySQL автоматически хеширует указанный пароль. Также существует синтаксис для CREATE
USER и ALTER USER, который позволяет указывать хешированные значения явно. Подробности см. в описаниях этих утверждений.
Для назначения пароля при создании новой учётной записи используйте CREATE USER и включите клаузу IDENTIFIED BY:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
CREATE USER также поддерживает синтаксис для указания плагина аутентификации учётной записи. См. раздел 15.7.1.3, «Утверждение CREATE USER».
Для назначения или изменения пароля существующей учётной записи используйте утверждение ALTER USER с клаузой IDENTIFIED BY:
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
Если вы подключены не как анонимный пользователь, вы можете изменить свой собственный пароль, не называя свою собственную учётную запись явно:
ALTER USER USER() IDENTIFIED BY 'password';
Чтобы изменить пароль учётной записи из командной строки, используйте команду mysqladmin:
mysqladmin -u user_name -h host_name password "password"
Учётная запись, для которой эта команда задаёт пароль, — это учётная запись с записью в таблице системы mysql.user, соответствующей user_name в столбце User и клиенту-хосту с которого вы подключаетесь в столбце Host.
Установка пароля с помощью mysqladmin следует считать небезопасным. На некоторых системах ваш пароль становится видимым для системных программ статуса, таких как ps, которые могут быть вызваны другими пользователями для отображения командных строк. Клиенты MySQL обычно перезаписывают аргумент пароля командной строки нулями во время их последовательности инициализации. Однако всё ещё есть короткий промежуток времени, в течение которого значение видно. Кроме того, на некоторых системах эта стратегия перезаписи неэффективна, и пароль остаётся видимым для ps. (Системы Unix SystemV и, возможно, другие, подвержены этой проблеме.)
Если вы используете репликацию MySQL, имейте в виду, что пароль, используемый репликой в рамках CHANGE REPLICATION
SOURCE TO, фактически ограничен 32 символами; если пароль длиннее, любые лишние символы усекаются. Это не связано с каким-либо ограничением, накладываемым сервером MySQL в целом, а скорее является проблемой, специфичной для репликации MySQL.
© 2025 Oracle
Licensed under the GPLv2 License.