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