В этой статье мы с вами разберём предоставление прав доступа различного уровня третьим лицам. Создание пользователя в MySQL начинает работу, ведь без создания юзерских аккаунтов сделать нельзя решительно ничего. Также рассмотрим предоставление права доступа к созданным таблицам, без хорошего понимания которых работа с облачными сервисами вроде timeweb.cloud будет совершенно невозможна.
Как создать обычного пользователя в 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
Заключение
Итак, мы рассмотрели, как создать пользователя и выдать ему необходимые права (привилегии). Владея этими знаниями вы сможете уверенно работать с базами, создавать новых юзеров, распределять права и возможности при работе.

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