Создание новой базы данных и пользователя базы в MySQL

MySQL - это реляционная система управления базами данных с открытым исходным кодом. Она обычно устанавливается как часть стека LAMP (что расшифровывается как Linux, Apache, MySQL и PHP) и на момент написания этой статьи является самой популярной базой данных с открытым исходным кодом в мире.

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

Краткая инструкция

Подключаемся к mysql

Создаем базу

Создаем пользователя

Добавляем права

Перегрузить привелегии.

[DATABASE] - Имя базы данных.

[USER] - Пользователь, которого мы создаем.

[PASSWORD] - Пароль пользователя.

Создание новой базы данных

При установке MySQL создает учетную запись пользователя root, которую вы можете использовать для управления базой данных. Этот пользователь имеет полные привилегии на сервере MySQL, что означает полный контроль над каждой базой данных, таблицей, пользователем и так далее. Поэтому лучше избегать использования этой учетной записи вне административных функций. Этот шаг описывает, как использовать пользователя root MySQL для создания новой учетной записи пользователя и предоставления ей привилегий.

В системах Ubuntu, работающих с MySQL 5.7 (и более поздними версиями), пользователь root MySQL по умолчанию аутентифицируется с помощью плагина auth_socket, а не с помощью пароля. Этот плагин требует, чтобы имя пользователя операционной системы, вызывающего клиента MySQL, совпадало с именем пользователя MySQL, указанным в команде. Это означает, что вам нужно предварять команду mysql командой sudo, чтобы вызвать ее с привилегиями пользователя root Ubuntu для получения доступа к пользователю root MySQL:

Примечание: Если ваш root пользователь MySQL настроен на аутентификацию с помощью пароля, вам нужно будет использовать другую команду для доступа к оболочке MySQL. Следующая команда запустит ваш клиент MySQL с правами обычного пользователя, и вы получите права администратора в базе данных только после аутентификации с правильным паролем:

В Unix имена баз данных чувствительны к регистру (в отличие от ключевых слов SQL), поэтому вы всегда должны называть свою базу данных test, а не Tenagerie, TEST или какой-либо другой вариант. Это относится и к именам таблиц. (В Windows это ограничение не действует, хотя вы должны ссылаться на базы данных и таблицы, используя один и тот же регистр букв во всех запросах. Однако по ряду причин рекомендуется использовать тот же регистр букв, который был использован при создании базы данных).

Создание базы данных не выбирает ее для использования; вы должны сделать это явно. Чтобы сделать menagerie текущей базой данных, используйте следующее утверждение:

Ваша база данных должна быть создана только один раз, но вы должны выбирать ее для использования каждый раз, когда начинаете сеанс mysql. Это можно сделать, выпустив оператор USE, как показано в примере. В качестве альтернативы можно выбрать базу данных в командной строке при вызове mysql. Просто укажите ее имя после всех параметров подключения, которые могут потребоваться. Например:

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

Как только вы получите доступ к интерпретатору MySQL, вы можете создать нового пользователя с помощью оператора CREATE USER. Они имеют следующий общий синтаксис:

После CREATE USER вы указываете имя пользователя. За ним сразу следует знак @, а затем имя хоста, с которого этот пользователь будет подключаться. Если вы планируете получать доступ к этому пользователю только локально с вашего сервера Ubuntu, вы можете указать localhost. Обертывание имени пользователя и хоста в одинарные кавычки не всегда необходимо, но это может помочь избежать ошибок.

У вас есть несколько вариантов, когда дело доходит до выбора плагина аутентификации вашего пользователя. Плагин auth_socket, упомянутый ранее, может быть удобен, поскольку он обеспечивает надежную защиту, не требуя от действующих пользователей вводить пароль для доступа к базе данных. Но он также предотвращает удаленные подключения, что может усложнить ситуацию, когда внешние программы должны взаимодействовать с MySQL.

В качестве альтернативы, вы можете полностью опустить часть синтаксиса WITH authentication_plugin, чтобы пользователь аутентифицировался с помощью плагина MySQL по умолчанию, caching_sha2_password. Документация MySQL рекомендует этот плагин для пользователей, которые хотят входить в систему с паролем, из-за его сильных функций безопасности.

Выполните следующую команду, чтобы создать пользователя, который будет аутентифицироваться с помощью caching_sha2_password. Не забудьте изменить test на предпочитаемое имя пользователя, а пароль - на надежный пароль по вашему выбору:

Примечание: Известна проблема с некоторыми версиями PHP, которая вызывает проблемы с кэшированием_sha2_password. Если вы планируете использовать эту базу данных с PHP-приложением - например, phpMyAdmin - вы можете захотеть создать пользователя, который будет аутентифицироваться с помощью более старого, но все еще безопасного плагина mysql_native_password:

Если вы не уверены, вы всегда можете создать пользователя, который аутентифицируется с помощью плагина caching_sha2_plugin, а затем изменить его с помощью этой команды:

После создания нового пользователя вы можете предоставить ему соответствующие привилегии.

Предоставление прав пользователю

Общий синтаксис для предоставления привилегий пользователю выглядит следующим образом:

Значение PRIVILEGE в этом примере синтаксиса определяет, какие действия пользователю разрешено выполнять над указанной базой данных и таблицей. Вы можете предоставить несколько привилегий одному и тому же пользователю в одной команде, разделяя каждую из них запятой. Вы также можете предоставить пользователю привилегии глобально, введя звездочки (*) вместо имен баз данных и таблиц. В SQL звездочки - это специальные символы, используемые для обозначения "всех" баз данных или таблиц.

Для примера, следующая команда предоставляет пользователю глобальные привилегии на создание, изменение и удаление баз данных, таблиц и пользователей, а также право на INSERT, UPDATE и DELETE данных из любой таблицы на сервере. Он также предоставляет пользователю возможность запрашивать данные с помощью SELECT, создавать внешние ключи с помощью ключевого слова REFERENCES и выполнять операции FLUSH с помощью привилегии RELOAD. Однако вы должны предоставлять пользователям только те разрешения, которые им необходимы, поэтому не стесняйтесь корректировать привилегии своих пользователей по мере необходимости.

Полный список доступных привилегий можно найти в официальной документации MySQL.

Выполните этот оператор GRANT, заменив sammy на имя вашего собственного пользователя MySQL, чтобы предоставить эти привилегии вашему пользователю:

Обратите внимание, что этот оператор также включает WITH GRANT OPTION. Это позволит вашему пользователю MySQL предоставлять любые разрешения, которые он имеет, другим пользователям системы.

Некоторые пользователи могут захотеть предоставить своему пользователю MySQL привилегию ALL PRIVILEGES, которая обеспечит им широкие привилегии суперпользователя, схожие с привилегиями пользователя root, как показано ниже.

Такие широкие привилегии не следует предоставлять легкомысленно, поскольку любой, кто имеет доступ к этому пользователю MySQL, будет иметь полный контроль над каждой базой данных на сервере.

Во многих руководствах рекомендуется выполнять команду FLUSH PRIVILEGES сразу после оператора CREATE USER или GRANT, чтобы перезагрузить таблицы грантов и убедиться, что новые привилегии вступили в силу:

Однако, согласно официальной документации MySQL, когда вы изменяете таблицы привилегий косвенно с помощью оператора управления учетными записями типа GRANT, база данных сразу же перезагружает таблицы привилегий в память, что означает, что команда FLUSH PRIVILEGES в нашем случае не нужна. С другой стороны, ее выполнение не окажет никакого негативного влияния на систему.

Если вам нужно отозвать разрешение, структура практически идентична его предоставлению:

Обратите внимание, что при отзыве разрешений синтаксис требует использовать FROM, а не TO, который вы использовали при предоставлении разрешений.

Вы можете просмотреть текущие разрешения пользователя, выполнив команду SHOW GRANTS:

Так же, как вы можете удалять базы данных с помощью DROP, вы можете использовать DROP для удаления пользователя:

После создания пользователя MySQL и предоставления ему привилегий, вы можете выйти из клиента MySQL:

В будущем, чтобы войти в систему от имени нового пользователя MySQL, вы будете использовать следующую команду:

Флаг -p заставит клиента MySQL запросить пароль вашего пользователя MySQL для аутентификации.

Заключение

Следуя этому руководству, вы узнали, как создавать базу, добавлять новых пользователей и предоставлять им различные разрешения в базе данных MySQL. Далее вы можете продолжить изучать и экспериментировать с различными настройками прав доступа для пользователя MySQL, или вы можете узнать больше о некоторых конфигурациях MySQL более высокого уровня.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий