Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Создание нового пользователя и раздача прав в MySQL

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
15 декабря 2021 г.
2366
5 минут чтения
Средний рейтинг статьи: 5

New Documentation

В этой статье мы с вами разберём предоставление прав доступа различного уровня третьим лицам. Создание пользователя в MySQL начинает работу, ведь без создания юзерских аккаунтов сделать нельзя решительно ничего. Также рассмотрим предоставление права доступа к созданным таблицам, без хорошего понимания которых работа с облачными сервисами вроде timeweb.cloud будет совершенно невозможна.

Создание Нового Пользователя И Раздача Прав В My SQL (1)

Как создать обычного пользователя в MySQL

Чтобы добавить пользователя в MySQL необходимо изначально иметь привилегии на создание пользователей. Синтаксис запроса выглядит так:

CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
DEFAULT ROLE role [, role ] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']

Описание полей:

  • [IF NOT EXISTS] – если пользователь существует, то команда остановит выполнение. Необязательный параметр.
  • User – имя учетной записи. Состоит из имени пользователя и имени хоста. ('user_name'@'host_name'). Часть 'host_name' является не обязательной (задает хост, с которого можно будет подключиться с данным именем, % - означает все возможные хосты). Если мы хотим в MySQL создать пользователя для удалённого подключения, то можно указать доменное имя, IP-адрес или адрес подсети. Имя учетной записи, состоящей только из имени пользователя, можно записать так: 'user_name'@'%' – такая учетная запись будет доступна с любого хоста. Кроме того, можно создать анонимного пользователя: ''@'localhost'.
  • [auth_option] необязательное значение, указывает, как учетная запись проходит аутентификацию (пароль, свойства блокировки и т.д.).
  • DEFAULT ROLE – задает роль пользователя.
  • REQUIRE {NONE | tls_option [[AND] tls_option] ...} – если указано, то проверяет сертификат X.509 в дополнении к обычной аутентификации.
  • WITH – если указано, позволяет установить ограничение на использование ресурсов сервера. Например, ограничить кол-во запросов, обновлений или подключений к серверу.
  • password_option – параметры управления паролями (необязательный параметр). Например, срок действия, ограничение повторного использования, отслеживание неудачных попыток входа.
  • COMMENT…| ATTRIBUTE – добавление пользовательских комментариев или атрибутов в формате json (нельзя использовать одновременно). Необязательный параметр.

Выдача привилегий

Создать пользователя и дать права на базу в MySQL – первое, что вы делаете, начиная работу. Чтобы выдать привилегии или назначить роль (роль – это именованный набор привилегий) используется оператор GRANT. Одновременно выдать и то, и другое нельзя. Чтобы выдавать привилегии, необходимо самому иметь эти привилегии.

Синтаксис для определения роли учетной записи:

GRANT role [, role] ...
TO user_or_role [, user_or_role] ...
[WITH ADMIN OPTION]
  • role – роль, которую предоставляем.
  • user_or_role – имя учетной записи или роль.
  • WITH ADMIN OPTION – если указано, то с учетной записи, которой предоставили роль, можно будет также выдать эту роль кому-то ещё. Пример:
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';

Синтаксис для добавления привилегий:

GRANT
priv_type
ON [object_type] priv_level
TO user_or_role
  • priv_type – тип привилегий. Их много. Например, привилегии для создания таблиц, их обновления, заполнения или удаления; для создания ролей, пользователей, индексов; привилегии администрирования резервного копирования и учетных записей без паролей и много-много всего еще.
  • object_type – если указано, задает тип следующего объекта (может быть TABLE, FUNCTION или PROCEDURE). 
  • priv_level – задает уровень привилегий.

Привилегии могут быть:

  • глобальные – например, на создание пользователей. Применяются ко всем базам на сервере. Синтаксис: ON *.*
 GRANT SELECT, INSERT ON *.* TO 'user_name'@'localhost';
  • баз данных – применяются ко всем объектам в указанной базе данных. Применяются для создания или удаления таблиц. Пример:
 GRANT SELECT, INSERT ON mydb.* TO 'user_name'@'localhost';
  • таблиц – применяются ко всем столбцам в таблице. Применяется вставка или обновление записей. Пример:
GRANT SELECT, INSERT ON mydb.mytable TO 'user_name'@'localhost';
  • столбцов – применяется к определенным столбцам (вставка, просмотр, обновление данных). В примере за привилегией следует название столбца в круглых скобках:
 GRANT SELECT (col1), INSERT (col1, col2) ON mydb.mytbl TO 'user_name'@'localhost';

Также есть привилегии подпрограмм и прокси-пользователей.

Если предоставить учетной записи все привилегии, то можно создать «суперпользователя»:

 GRANT ALL ON *.* TO 'user_name'@'localhost';

Для того чтобы отозвать роли или привилегии учетной записи, используется REVOKE.

REVOKE INSERT ON *.* FROM 'user_name'@'localhost';

Мы отозвали у пользователя привилегию вставки данных в таблицы на глобальном уровне.

Чтобы удалить пользователя, используется DROP:

DROP USER 'user_name'@'localhost';
Тарифы MySQL

Заключение

Итак, мы рассмотрели, как создать пользователя и выдать ему необходимые права (привилегии). Владея этими знаниями вы сможете уверенно работать с базами, создавать новых юзеров, распределять права и возможности при работе.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону