Tutorial
Создание нового пользователя и предоставление прав в MySQL
Введение
MySQL — это программное обеспечение для управления базами данных с открытым исходным кодом, которое помогает пользователям хранить, организовывать и в будущем получать данные. MySQL обладает множеством возможностей предоставления конкретным пользователям детализированных прав для работы с таблицами и базами данных. В этом руководстве мы кратко расскажем о ряде из этих возможностей.
Что означает выделенный текст
В этом руководстве любые строки, которые пользователь должен ввести или изменить, будут выделены цветом! Весь остальной текст можно просто скопировать и вставить.
Создание нового пользователя
В части 1 руководства по работе с MySQL мы воспользовались всеми возможностями для редактирования в MySQL с помощью пользователя с правами root, обладающего полным доступом ко всем базам данных. Однако для тех случаев, когда нам могут потребоваться дополнительные ограничения, существует возможность создания пользователей с настраиваемыми правами.
Давайте начнем с создания нового пользователя внутри оболочки MySQL:
- CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
Примечание: при добавлении пользователей в оболочке MySQL в данном руководстве мы будем в качестве хоста пользователя использовать localhost
, а не IP-адрес сервера. localhost
— это имя хоста, которое означает «этот компьютер», и MySQL работает с этим именем хоста особенным образом: когда пользователь на данном хосте выполняет вход в MySQL, СУБД будет пытаться подключиться к локальному серверу, используя файл сокета Unix. Таким образом, localhost
обычно используется, если вы планируете подключение к вашему серверу через SSH или если вы запускаете локальный клиент mysql
для подключения к локальному серверу MySQL.
В данный момент newuser не имеет прав на выполнение каких-либо действий с базами данных. Фактически, даже если newuser попытается выполнить вход (с помощью пароля password), он не сможет получить доступ к оболочке MySQL.
Таким образом, первое, что необходимо сделать, — это предоставить пользователю доступ к необходимой ему информации.
- GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Звездочки в этой команде обозначают базу данных и таблицу (соответственно), к которым пользователь может получить доступ. Эта конкретная команда позволяет пользователю читать, редактировать, запускать и выполнять любые задачи для всех баз данных и таблиц.
Обратите внимание, что в этом примере мы предоставляем newuser полный корневой доступ ко всему содержанию нашей базы данных. Хотя это может быть полезно для объяснения некоторых концепций MySQL, в большинстве случаев это может быть нецелесообразно и может отрицательно сказаться на безопасности вашей базы данных.
После того как вы определились с правами, которые вы хотите предоставить вашему новому пользователю, необходимо будет во всех случаях перезагрузить все привилегии.
- FLUSH PRIVILEGES;
После этого внесенные вами изменения вступят в силу.
Предоставление пользователю различных прав
Ниже представлен короткий список других часто используемых прав, которые могут предоставляться пользователям.
- ALL PRIVILEGES — как мы уже увидели ранее, данный набор прав предоставляет пользователю MySQL полный доступ к определенной базе данных (если не выбрана ни одна база данных, предоставляется глобальный доступ к системе)
- CREATE — позволяет пользователю создавать новые таблицы или базы данных
- DROP — позволяет пользователю удалять таблицы или базы данных
- DELETE — позволяет пользователю удалять строки из таблиц
- INSERT — позволяет пользователю вставлять строки в таблицы
- SELECT — позволяет пользователю выполнять команду
SELECT
для чтения данных из базы - UPDATE — позволяет пользователю обновлять строки таблицы
- GRANT OPTION — позволяет пользователю предоставлять или отзывать права других пользователей
Чтобы предоставить конкретному пользователю какое-либо право, вы можете использовать следующую структуру команды:
- GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';
Если вы хотите предоставить пользователю доступ к любой базе данных или любой таблице, необходимо поместить звездочку (*) на место имени базы данных или имени таблицы.
При каждом обновлении или изменении права необходимо использовать команду сброса привилегий.
Если вам требуется отозвать какое-либо право, структура команды будет практически идентична структуре команды, используемой для предоставления права:
- REVOKE type_of_permission ON database_name.table_name FROM 'username'@'localhost';
Обратите внимание, что при отзыве прав синтаксис требует использования элемента FROM
вместо элемента TO
, который мы использовали при предоставлении прав.
Вы можете просмотреть текущие права пользователя с помощью следующей команды:
- SHOW GRANTS FOR 'username'@'localhost';
Так же как вы можете удалять базы данных с помощью DROP, вы можете использовать DROP для полного удаления пользователя:
- DROP USER 'username'@'localhost';
Чтобы протестировать вашего нового пользователя, выполните выход, введя следующую команду:
- quit
а затем войдите снова, введя следующую команду в терминале:
- mysql -u [username] -p
Заключение
После прохождения этого руководства у вас должно появиться понимание того, как добавлять новых пользователей и предоставлять им различные права для работы с базой данных MySQL. Теперь вы можете продолжать изучение и эксперименты с различными конфигурациями прав для вашей базы данных или узнать больше о некоторых продвинутых конфигурациях MySQL.
Если вы хотите узнать больше об основах работы с MySQL, мы рекомендуем вам ознакомиться со следующими обучающими материалами: