В этой статье мы с вами разберём предоставление прав доступа различного уровня третьим лицам. Создание пользователя в MySQL начинает работу, ведь без создания юзерских аккаунтов сделать нельзя решительно ничего. Также рассмотрим предоставление права доступа к созданным таблицам, без хорошего понимания которых работа с облачными сервисами вроде timeweb.cloud будет совершенно невозможна.
Чтобы добавить пользователя в 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
Итак, мы рассмотрели, как создать пользователя и выдать ему необходимые права (привилегии). Владея этими знаниями вы сможете уверенно работать с базами, создавать новых юзеров, распределять права и возможности при работе.
Добрый!
Как выдать привелегии себе, ничего не могу сделать, получаю ответ что у меня не достаточно привилегий для создания баз.
Спасибо
Здравствуйте! В первую очередь проверьте, что у вас есть доступ к MySQL root, root может создавать базы. Если нужно создавать базы не от root, то потребуется зайти под root и выдать права нужному пользователю.
Также, если вы используете MySQL версии 8.0, то для самого root сначала нужно дать разрешение на создание пользователей (в этой версии у root по умолчанию недоступна команда GRANT). Подробнее можно посмотреть здесь: https://stackoverflow.com/questions/50177216/