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

Обновлено: 05.07.2024

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

Что означает выделенный текст

В этом руководстве любые строки, которые пользователь должен ввести или изменить, будут выделены цветом ! Весь остальной текст можно просто скопировать и вставить.

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

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

Давайте начнем с создания нового пользователя внутри оболочки MySQL:

Примечание: при добавлении пользователей в оболочке MySQL в данном руководстве мы будем в качестве хоста пользователя использовать localhost , а не IP-адрес сервера. localhost — это имя хоста, которое означает «этот компьютер», и MySQL работает с этим именем хоста особенным образом: когда пользователь на данном хосте выполняет вход в MySQL, СУБД будет пытаться подключиться к локальному серверу, используя файл сокета Unix. Таким образом, localhost обычно используется, если вы планируете подключение к вашему серверу через SSH или если вы запускаете локальный клиент mysql для подключения к локальному серверу MySQL.

В данный момент newuser не имеет прав на выполнение каких-либо действий с базами данных. Фактически, даже если newuser попытается выполнить вход (с помощью пароля password ), он не сможет получить доступ к оболочке MySQL.

Таким образом, первое, что необходимо сделать, — это предоставить пользователю доступ к необходимой ему информации.

Звездочки в этой команде обозначают базу данных и таблицу (соответственно), к которым пользователь может получить доступ. Эта конкретная команда позволяет пользователю читать, редактировать, запускать и выполнять любые задачи для всех баз данных и таблиц.

Обратите внимание, что в этом примере мы предоставляем newuser полный корневой доступ ко всему содержанию нашей базы данных. Хотя это может быть полезно для объяснения некоторых концепций MySQL, в большинстве случаев это может быть нецелесообразно и может отрицательно сказаться на безопасности вашей базы данных.

После того как вы определились с правами, которые вы хотите предоставить вашему новому пользователю, необходимо будет во всех случаях перезагрузить все привилегии.

После этого внесенные вами изменения вступят в силу.

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

Ниже представлен короткий список других часто используемых прав, которые могут предоставляться пользователям.

  • ALL PRIVILEGES — как мы уже увидели ранее, данный набор прав предоставляет пользователю MySQL полный доступ к определенной базе данных (если не выбрана ни одна база данных, предоставляется глобальный доступ к системе)
  • CREATE — позволяет пользователю создавать новые таблицы или базы данных
  • DROP — позволяет пользователю удалять таблицы или базы данных
  • DELETE — позволяет пользователю удалять строки из таблиц
  • INSERT — позволяет пользователю вставлять строки в таблицы
  • SELECT — позволяет пользователю выполнять команду SELECT для чтения данных из базы
  • UPDATE — позволяет пользователю обновлять строки таблицы
  • GRANT OPTION — позволяет пользователю предоставлять или отзывать права других пользователей

Чтобы предоставить конкретному пользователю какое-либо право, вы можете использовать следующую структуру команды:

Если вы хотите предоставить пользователю доступ к любой базе данных или любой таблице, необходимо поместить звездочку (*) на место имени базы данных или имени таблицы.

При каждом обновлении или изменении права необходимо использовать команду сброса привилегий.

Если вам требуется отозвать какое-либо право, структура команды будет практически идентична структуре команды, используемой для предоставления права:

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

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

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

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

а затем войдите снова, введя следующую команду в терминале:

Заключение

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

Если вы хотите узнать больше об основах работы с MySQL, мы рекомендуем вам ознакомиться со следующими обучающими материалами:

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

Поэтому для каждой базы данных нужно создавать отдельных пользователей и настраивать для них права. В этой статье мы рассмотрим, как выполняется создание пользователя mysql, а также настройка его прав.

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

1. Как создать пользователя MySQL

Предположим, что база данных уже создана и называется test_database. Нам нужно открыть клиент базы данных. Для этого наберите в терминале:


Теперь можно работать. Для создания пользователя используется команда CREATE USER, её синтаксис такой:

CREATE USER 'имя_пользователя' @ 'хост' IDENTIFIED BY 'пароль' ;

Кроме имени пользователя, здесь нужно задать хост, с которого может авторизоваться этот пользователь. Здесь может быть доменное имя, IP-адрес, адрес подсети или знак "%", который означает все возможные хосты. Это очень удобно, потому что вы можете создать пользователя, к которому можно будет подключится только локально или настроить отдельно права для локального или удалённого пользователя.

Например, давайте создадим локального пользователя test_user с паролем password:

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'password';


Или можно создать пользователя, который будет доступен со всех хостов:

CREATE USER 'test_user'@'%' IDENTIFIED BY 'password';


Смотрим наших пользователей:


Все пользователи созданы.

2. Права пользователя MySQL

Создать пользователя - это ещё далеко не всё, теперь нужно назначить ему права. Для этого используется команда GRAT. У неё такой синтаксис:

GRANT привилегии ON база_данных . таблица TO ' имя_пользователя ' @ ' хост ' ;

Здесь можем дать определённые привилегии для опредёленного пользователя к базе данных или таблице. Если нужно дать права для всех баз данных или таблиц, используйте вместо названия звездочку - "*". Вот основные права пользователя MySQL, которые вы можете использовать:

  • ALL PRIVILEGES - все, кроме GRANT;
  • USAGE PRIVILEGES - никаких привилегий;
  • SELECT - делать выборки из таблиц;
  • INSERT - вставлять данные в таблицу;
  • UPDATE - обновлять данные в таблице;
  • DELETE - удалять данные из таблицы;
  • FILE - разрешает читать файлы на сервере;
  • CREATE - создавать таблицы или базы данных;
  • ALTER - изменять структуру таблиц;
  • INDEX - создавать индексы для таблиц;
  • DROP - удалять таблицы;
  • EVENT - обработка событий;
  • TRIGGER - создание триггеров.

Также доступны такие привилегии администрирования баз данных:

  • GRANT - изменять права пользователей;
  • SUPER - суперпользователь;
  • PROCESS - получение информации о состоянии MySQL;
  • RELOAD - позволяет перезагружать таблицы привилегий;
  • SHUTDOWN - позволяет отключать или перезапускать базу данных;
  • SHOW DATABASES - просмотр списка баз данных;
  • LOCK TABLES - блокирование таблиц при использовании SELECT;
  • REFERENCES - создание внешних ключей для связывания таблиц;
  • CREATE USER - создание пользователей;

Чтобы дать права пользователю MySQL на обновление и добавление записей для базы данных test_database, выполните:

GRANT SELECT,UPDATE,INSERT ON test_database . * TO 'test_user'@'localhost';

Дальше дадим этому же пользователю все права над этой базой данных:

GRANT ALL PRIVILEGES ON test_database . * TO 'test_user'@'localhost';

Теперь посмотрим привилегии нашего пользователя:

SHOW GRANTS FOR 'test_user'@'localhost';


Мы видим, что для всех баз данных и таблиц привелегий нет, но зато есть все привилегии для базы данных test_database. Вот так это работает. После обновления прав пользователя необходимо обновить таблицу прав пользователей MySQL в памяти. Для этого выполните:

3. Удаление прав пользователя MySQL

Чтобы отозвать права у пользователя MySQL, используйте команду REVOKE вместо GRANT. Её синтаксис похож на GRANT:

REVOKE привилегии ON база_данных . таблица FROM ' имя_пользователя ' @ ' хост ' ;

Например, заберём все права на базу данных test_database у нашего пользователя:

REVOKE ALL PRIVILEGES ON test_database . * FROM 'test_user'@'localhost';


4. Создание суперпользователя MySQL

Если вам необходимо создать пользователя со всеми правами MySQL на замену для root, то можно использовать такую конструкцию:

GRANT ALL PRIVILEGES ON * . * TO 'test_user'@'localhost';

GRANT ALL PRIVILEGES ON * . * TO 'test_user'@'localhost' WITH GRANT OPTION;

Теперь этот пользователь является суперпользователем для MySQL и, авторизовавшись от его имени в PhpMyAdmin, вы можете делать всё то же самое, что и с помощью root.

Выводы

В этой статье мы рассмотрели, как создать пользователя MySQL в Ubuntu или в любом другом дистрибутиве. Работа в командной строке с MySQL может показаться довольно сложной. Но сделать это надо всего один раз -после установки базы данных. А дальше можно выполнять все действия в Phpmyadmin.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

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

Вся операции будут выполняться внутри консоли MySQL под root пользователем:

Вам будет предложено ввести пароль для root пользователя.

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

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

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

Все команды MySQL выполняются с точкой с запятой ( ; ).

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

Следующее, что нам нужно будет сделать, это предоставить привилегии этому пользователю, чтобы он мог получить доступ к MySQL клиенту и работать с соответствующей базой или базами данных:

  • database - название базы в MySQL, к которой мы предоставляем доступ.
  • table - название таблицы БД, к которой мы предоставляем доступ

Вы можете использовать символ звездочки (*), если захотите предоставить доступ ко всем базам данных/таблицам:

С помощью первой команды мы предоставляем пользователю user все права доступа ко всем таблицам, относящимся к базе данных с именем database . Во втором случае, для пользователя предоставляется доступ ко всем базам данных.

Существует несколько типов привилегий, которые могут быть предоставлены пользователю. Вы можете найти полный список привилегий, поддерживаемых MySQL, здесь.

Вот список наиболее часто используемых привилегий MySQL:

  • ALL PRIVILEGES - пользователь имеет полный доступ к базе данных.
  • CREATE - пользователю разрешено создавать базы данных и таблицы.
  • DROP - пользователь имеет право удалять базы данных и таблицы.
  • DELETE - пользователь может удалять строки из определенной таблицы.
  • INSERT - пользователь может вставлять строки в определенную таблицу.
  • SELECT - пользователю разрешено читать базу данных.
  • UPDATE - пользователь может обновлять строки таблицы.

Вот пример синтаксиса, в котором только три типа привилегий предоставляются пользователю:

Для того, чтобы изменения вступили в силу и привилегии были сохранены, в конце должна быть выполнена следующая команда:

Вот ещё несколько примеров:

Предоставление всех привилегий пользователю по определенной базе данных:

Предоставление всех привилегий пользователю на всех базы данных:

Предоставление пользователю всех прав доступа для определенной таблицы в базе данных:

Отображение привилегий пользователя

Чтобы найти привилегии, предоставленные определенному пользователю MySQL, используйте оператор SHOW GRANTS :

Отмена привилегий у пользователя MySQL

Синтаксис отзыва одного или нескольких привилегий с учетной записи пользователя практически идентичен синтаксису, используемому при предоставлении привилегий.

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

Удаление существующей учетной записи пользователя MySQL

Чтобы удалить учетную запись пользователя MySQL, используйте оператор DROP USER :

Вышеприведенная команда удалит учетную запись пользователя и его привилегии.

Заключение

Это руководство охватывает только основы, но оно должно стать хорошим началом для тех, кто хочет научиться создавать новые учетные записи пользователей MySQL и предоставлять им права доступа.

Учетные записи в СУБД MySQL/MariaDB представлены в виде связки <имя пользователя>@<удаленный хост, с которого можно подключаться>. Это может вызвать путаницу, поэтому необходимо быть внимательнее, например, учетные записи root@localhost и root@192.168.0.15 — разные.

Создание пользователя и выдача прав

Рассмотрим два варианта создания учетных записей в СУБД MySQL/MariaDB.

1. С помощью команды GRANT.

Данный метод позволяет одной командой сразу и создать пользователя, и дать ему права. Но, начиная с MySQL 8, она возвращает ошибку — разработчики запретили ее использование и сначала требуется создать пользователя (с помощью CREATE USER).

> GRANT <тип привилегий> ON <объект> TO <пользователь> [IDENTIFIED BY <пароль>] <дополнительные опции>;

Например, эта команда предоставляет права доступа пользователю и, если его не существует, создает его:

ALL PRIVILEGES: предоставляет полные права на использование данных.
*.* : права предоставляются на все базы и все таблицы.
dbuser: имя учетной записи.
localhost: доступ для учетной записи будет предоставлен только с локального компьютера.
password: пароль, который будет задан пользователю.
WITH GRANT OPTION: будут предоставлены дополнительные права на изменение структуры баз и таблиц.

2. С помощью команды CREATE USER.

Данный метод является универсальным. Он позволяет создать пользователя в системе без каких либо прав. После права назначаются командой GRANT.

Пример создания учетной записи:

После можно задать права командой:

Посмотреть существующих пользователей и их привилегии

Список привилегий (для кажого пользователя смотряться отдельно):

Смена пароля

Команды отличаются в зависимости от версии СУБД.

MySQL

Версия 5.7.6 и более современная:

Версия 5.7.5 и древнее:

* посмотреть версию СУБД можно командой mysql -V.

MariaDB

В MariaDB команда для смены пароля одна, независимо от версии:

* в данном примере будет задан пароль New_Password для пользователя root.

Смена пароля пользователю root после установки

Для старых версий СУБД и новых процедуры различаются.

MySQL < 8 или MariaDB

Первый раз пароль задается из командной строки операционной системы (для MySQL/MariaDB):

> mysqladmin -u root password

Для смены пароля root необходимо выполнить команду в оболочке mysql по инструкции, описанной выше.

MySQL 8 и выше

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

Мы увидим что-то на подобие:

* где oi25?wznro%W — пароль для пользователя root.

Заходим в оболочку sql с помощью данного пароля:

Сброс пароля для root

При необходимости, мы можем сбросить пароль для суперпользователя mysql. Для этого необходимо запустить сервер баз данных в безопасном режиме и ввести команду на смену пароля.

Для начала необходимо остановить сервис:

systemctl stop mysql

systemctl stop mariadb

Создаем каталог /var/run/mysqld и зададим для него нужные права:

mkdir -p /var/run/mysqld

chown mysql:mysql /var/run/mysqld

* в некоторых системах данного каталога может не быть, однако, для безопасного режима mysql он необходим.

Запускаем в безопасном режиме СУБД:

Запускаем оболочку sql — система не потребует пароль:

Выполняем запрос FLUSH PRIVILEGES:

Выходим из оболочки:

Уничтожаем процесс, который запустили ранее:

После, запускаем mysql в нормальном режиме:

systemctl start mysql

systemctl start mariadb

Другие примеры

Рассмотрим часто встречаемые операции по работе с пользователями сервера баз данных.

1. Особые права

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

* права на выборку и обновление данных во всех таблицах базы base1 для пользователя dbuser
** список всех возможных прав: all privileges, alter, create, create temporary tables, delete, drop, execute, file, index, insert, lock tables, process, references, reload, replication client, replication slave, select, show databases, shutdown, super, update, usage

2. Удаленное подключение

Разрешение на удаленное подключение и использование базы MySQL:

* предоставит права пользователю dbuser, который будет подключаться с компьютера с IP-адресом 192.168.0.55.

Мы можем сделать менее жесткое ограничение, разрешив доступ из подсети (особенно удобно при использовании динамических адресов):

* в данном примере мы разрешим подключение для любого узла из сети 192.168.0.0/24.

Или мы можем, вовсе, разрешить водключение с любого хоста (не безопасно):

3. Права на резервное копирование

Создание учетной записи MySQL с правами создания резервных копий:

4. Права доступа к определенной таблице

По сути, это такое же предоставление прав, но с указанием конкретной таблицы после базы:

* в данном примере предоставлены все права на таблицу table1 в базе base1.

5. Удаление пользователя

Нам может также понадобиться удалить ранее созданного пользователя. Это делается в два этапа:

* в данном примере мы первой командой отняли все права у пользователя dbuser (localhost) и второй — удалили его.

6. Права на создание других пользователей

Чтобы наш пользователь мог создавать других пользоватлей, задаем права:

* в данном примере мы даем права учетной записи creator, которая может подключаться к серверу с локального хоста.

Если нужно, чтобы из под данной учетной записи можно было также назначать права, добавим:

* обратите внимание, что мы просто добавили WITH GRANT OPTION.

Возможные ошибки

1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Причина: в новых версиях по умолчанию активированы политики на проверку сложности пароля. Их список можно посмотреть командой:

Вывод команды будет, примерно, следующим:

+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+

  1. Привести пароль в соответствие требованиям политик.
  2. Отключить политику, которая не позволяет использовать желаемый пароль. Например, чтобы отключить требование использовать цифры вводим:

> SET GLOBAL validate_password_number_count = 0;

2. ERROR 1728 (HY000): Cannot load from mysql.tables_priv. The table is probably corrupted

Причина: система считает, что таблица tables_priv в базе mysql неисправна.

Решение: чаще всего, ошибка возникает при переносе баз с одного сервера в другой. Если версии СУБД разные, таблица tables_priv может работать со сбоями. Для исправления необходимо выполнить команду mysql_upgrade — она проверяет все таблицы на совместимость с текущей версией MySQL/MariaDB и вносит исправления. Применение команды:

Читайте также: