По умолчанию в MySQL будет только один пользователь — root. Это администратор c доступом ко всем базам данных и таблицам внутри этих баз.
В этой статье покажем, как создать нового пользователя MySQL и присвоить ему права доступа при помощи командной строки.
Это удобно, если нужно дать доступ к конкретной таблице другому человеку, но с ограниченными правами. Например, чтобы он мог её редактировать, но не мог удалить.
Что внутри
- Подключиться к серверу и зайти в MySQL
- Создать пользователя MySQL
- Настроить права доступа
- Забрать права доступа
- Удалить пользователя
- Выйти из MySQL
Подключиться к серверу и зайти в MySQL
Сначала подключитесь к серверу по SSH. Обычно хостинг-провайдеры присылают логин и пароль для подключения в письме об активации хостинга. У нас это письмо называется по-разному в зависимости от типа хостинга: «Ваш виртуальный хостинг готов к использованию», «Это ваш VPS готов?» или «Выделенный сервер заказывали?».
После подключения к серверу авторизуйтесь как root пользователь MySQL с помощью команды:
mysql -u root -p
Создать пользователя MySQL
В другой нашей статье мы показали, как создать базу данных MySQL. Ради примера создали в ней таблицу со списком товаров для книжного магазина. Предположим, что нужно передать управление таблицей другому человеку. Ему нужно создать нового пользователя MySQL. Используйте для этого команду CREATE USER с таким синтаксисом:
CREATE USER “имя_пользователя“@”хост” IDENTIFIED BY “пароль“;
Параметр «хост» в команде означает устройство, с которого человек сможет подключаться к серверу MySQL. Здесь вы можете использовать несколько вариантов:
- localhost. Означает, что доступ к MySQL появится у пользователя только после того, как он подключится к серверу;
- IP-адрес устройства в сети, с которого человек будет подключаться к MySQL;
- %. Означает, что у пользователя будет доступ к MySQL с любого устройства.
В последних двух вариантах дополнительно подключаться к серверу не понадобится, но придётся сначала разрешить удалённые подключения в настройках MySQL.
Если не знаете, какой хост указать, используйте localhost. Это самый безопасный вариант. Придётся дополнительно подключаться к серверу, но зато злоумышленникам будет сложнее получить доступ к базе данных.
Теперь подставим в команду реальные данные. Не забудьте, что все команды в MySQL должны заканчиваться точкой с запятой.
CREATE USER "bookstore_administrator"@"localhost" IDENTIFIED BY "Hgy467Hkgd";
Настроить права доступа
Пользователя создали, но он ничего не может сделать с базой данных, пока вы не назначите ему привилегии. Для этого используйте команду GRANT с таким синтаксисом:
GRANT ПРИВИЛЕГИЯ, ПРИВИЛЕГИЯ ON база_данных.таблица TO “имя_пользователя“@”хост“;
Привилегия — это право на конкретные действия в MySQL. Например, редактирование базы данных или создание нового пользователя. Если нужно предоставить сразу несколько привилегий, пропишите их в команде через запятую.
Вот список часто используемых привилегий:
- ALL — дать все права к базе данных, кроме GRANT OPTION. Если вы не укажете название конкретной базы данных, пользователь получит полный доступ ко всему MySQL-серверу;
- CREATE — право создавать новые базы данных и таблицы;
- DELETE — право удалять строки из таблицы;
- DROP — право удалять базы данных или таблицы;
- GRANT OPTION — право назначать или отбирать права. Но получится дать или отобрать только те права, которыми владеет использующий команду пользователь;
- INSERT — право создавать строки в таблице;
- SELECT — право просматривать строки в таблицах;
- UPDATE — право менять содержание строк в таблицах.
Теперь давайте предоставим нашему пользователю bookstore_administrator привилегии на создание таблиц в базе данных bookstore. А также разрешим добавлять записи в эти таблицы:
GRANT CREATE, INSERT ON bookstore.* TO "bookstore_administrator"@"localhost";
Звёздочка в нашем примере означает «все таблицы внутри базы данных bookstore». Вы также можете заменить имя базы данных на звездочку, чтобы присвоить пользователю права для всех баз данных на сервере.
Когда закончите присваивать привилегии, перезагрузите их командой FLUSH PRIVILEGES, чтобы они вступили в силу:
FLUSH PRIVILEGES;
Теперь посмотрим, какие доступы есть у bookstore_administrator:
SHOW GRANTS FOR "bookstore_administrator"@"localhost";
Результат будет таким:
Если же через время вашему пользователю понадобятся дополнительные привилегии, добавьте их при помощи той же команды. Допустим, мы хотим дать пользователю bookstore_administrator все права.
GRANT ALL ON bookstore.* TO "bookstore_administrator"@"localhost";
Перезагружаем привилегии командой FLUSH PRIVILEGES и проверяем командой SHOW GRANTS:
Забрать права доступа
Если привилегии нужно наоборот забрать, запустите команду REVOKE:
REVOKE ПРИВИЛЕГИЯ ON база_данных.таблица FROM “имя_пользователя“@”хост“;
Допустим, нам нужно забрать у пользователя bookstore_administrator право удалять таблицы в базе данных bookstore. Тогда команда будет такой:
REVOKE DROP ON bookstore.* FROM "bookstore_administrator"@"localhost";
Не забудьте после этого снова перезагрузить привилегии командой FLUSH PRIVILEGES.
Удалить пользователя MySQL
Чтобы удалить пользователя MySQL, используйте команду DROP USER:
DROP USER “имя_пользователя“@”хост“;
Эта команда не требует дополнительного подтверждения. Пользователь базы данных удалится с первого раза и отменить это нельзя, поэтому используйте команду аккуратно.
Выйти из MySQL
В конце работы отключитесь от MySQL-сервера с помощью команды:
\q