Бесплатная миграция IT-инфраструктуры в облако

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

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

В этой статье мы с вами разберём предоставление прав доступа различного уровня третьим лицам. Создание пользователя в 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 (нельзя использовать одновременно). Необязательный параметр.
DBaaS

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

Создать пользователя и дать права на базу в 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

Заключение

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
15 декабря 2021 г.
4849
5 минут чтения
Средний рейтинг статьи: 3
Комментарии 2
BOBaH111
BOBaH111
18.04.2022, 10:18

Добрый!

Как выдать привелегии себе, ничего не могу сделать, получаю ответ что у меня не достаточно привилегий для создания баз.

Спасибо

Команда Timeweb Cloud
Команда Timeweb Cloud
18.04.2022, 11:16

Здравствуйте! В первую очередь проверьте, что у вас есть доступ к MySQL root, root может создавать базы. Если нужно создавать базы не от root, то потребуется зайти под root и выдать права нужному пользователю.

Также, если вы используете MySQL версии 8.0, то для самого root сначала нужно дать разрешение на создание пользователей (в этой версии у root по умолчанию недоступна команда GRANT). Подробнее можно посмотреть здесь: https://stackoverflow.com/questions/50177216/