- MySQL работа с пользователи
- Читайте другие интересные статьи
- Создание пользователей MySQL/MariaDB и предоставление прав доступа
- Создание пользователя и выдача прав
- 1. С помощью команды GRANT.
- 2. С помощью команды CREATE USER.
- Посмотреть существующих пользователей и их привилегии
- Смена пароля
- MySQL
- MariaDB
- Смена пароля пользователю root после установки
- MySQL mysqladmin -u root password
- MySQL 8 и выше
- Сброс пароля для root
- Другие примеры
- 1. Особые права
- 2. Удаленное подключение
- 3. Права на резервное копирование
- 4. Права доступа к определенной таблице
- 5. Удаление пользователя
- 6. Права на создание других пользователей
- Возможные ошибки
- Как создать пользователя MySQL
- Что внутри
- Подключиться к серверу и зайти в MySQL
- Создать пользователя MySQL
- Настроить права доступа
- Забрать права доступа
- Удалить пользователя MySQL
- Выйти из MySQL
MySQL работа с пользователи
Пользователи MySQL
Все пользователи MySQL хранятся в таблице user базы mysql.
Чтобы посмотреть список пользователей нужно переключиться на базу mysql и сделать выборку с помощью команды select:
Из списка видно, что в базе имеются учетные данные суперпользователя root с возможностью подключаться только локально с данного сервера(адреса 127.0.0.1, localhost и имя сервера testhost).
Еще есть системная учетная запись debian-sys-maint служит для внутренних системных целей СУБД MySQL.
В предыдущей части я рассказывал как настроить в конфигурационном файле /etc/mysql/my.cnfудаленное подключение к серверу баз данных MySQL.
Напомню: для этого в параметре bind-address выставляется IP адрес 0.0.0.0 вместо 127.0.0.1, т.е. демон mysqld будет слушать не только локальный интерфейс 127.0.0.1, а все адреса имеющиеся на сервере.
В этой части я расскажу как создать пользователя mysql, какие права выдать для различных пользователей, как выставить пароль и хост с которого будет производиться подключение.
Пользователь для веб сайта
Обычно различные веб приложения которые хранят информацию в базе mysql требуют создать отдельную учетную запись. Создадим пользователя website-user от имени которого будет работать наше веб приложение.
Пользователя можно создать через команду create user, а потом выдать права grant select,insert. но удобнее и быстрее сразу воспользоваться командой grant
Здесь я сразу указал:
- выдать права GRANT SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,DROP,INDEX (возможно для вашего веб приложения список прав будет иной, обратитесь к документации веб приложения);
- на базу website.* — имя базы указывается по маске (все файлы с названием website). Здесь можно указать *.*, тогда пользователь будет иметь права на все базы;
- ‘websiteuser’@’localhost’ — имя пользователя, и хост с которого этот пользователь может подключаться в базу;
- IDENTIFIED BY ‘website-password’ — указываем пароль пользователя.
Администратор баз данных
В следующем примере создадим учетную запись администратора баз данных который будет подключаться с IP адреса компьютера администратора 192.168.8.10
Выдадим полные права пользователю admin на базу website:
Теперь администратор может подключиться со своего компьютера к серверу баз данных. В этом примере я использовал команду create user, а уже потом grant в принципе разницы нет как будут создаваться пользователи.
Пользователь backup
Создадим пользователя backup для резервного копирования всех базы данных
- GRANT SHOW DATABASES, SELECT, LOCK TABLES, RELOAD — Здесь я указал необходимый набор прав для удаленного резервного копирования и в то же время достаточный для безопасного бэкапа;
- *.* — Пользователь backup может просматривать все базы;
- ‘backup’@’%’ — пользователь backup может подключаться с любого IP адреса. Обычно не требуется разрешать подключения с любого ip для целей резервного копирования, так как у сервера backup всегда постоянный IP адрес.
Как поменять пароль?
Чтобы поменять пароль можно воспользоваться командой mysqladmin эту команду нужно запускать в bash.
А так же можно воспользоваться командой (SQL синтаксис) из консоли MySQL
Как сбросить пароль root?
Поменять пароль root можно всеми теми же командами, что и для обычного пользователя. Но вот что делать если вы забыли пароль рута или по каким-то причинам его утеряли, тогда проделаем следующие операции.
1) Останавливаем MySQL:
2) Запускаем MySQL с особыми параметрами:
3) Запускаем клиента MySQL:
4) Выполняем запрос SQL:
где newpassword — новый пароль
5) Применяем изменения:
6) Выходим из клиента MySQL:
7) Перезапускаем MySQL сервер:
как создавать из командной строки mysql новую базу данных и нового пользователя mysql с полными правами на только что созданную базу.
Посмотрим существующих пользователей
Дадим права пользователю test на чтение всех таблиц базы scada
Дадим все права пользователю test на все таблицы базы scada
Для того чтобы выставить новому пользователю полные права на все базы данных используем следующую команду:
Доступ к базе для данного пользователя возможен только с localhost. Если вы хотите дать ему доступ к базе с любого хоста, используете % вместо localhost:
Проверить права пользователя :
Удаляются пользователи проще, чем создаются :). Например, если мы решим избавиться от пользователя ’my_user’
Читайте другие интересные статьи
Понравилась статья, расскажи о ней друзьям, нажми кнопку!
Источник
Создание пользователей MySQL/MariaDB и предоставление прав доступа
Учетные записи в СУБД MySQL/MariaDB представлены в виде связки @ . Это может вызвать путаницу, поэтому необходимо быть внимательнее, например, учетные записи root@localhost и root@192.168.0.15 — разные.
Создание пользователя и выдача прав
Рассмотрим два варианта создания учетных записей в СУБД MySQL/MariaDB.
1. С помощью команды GRANT.
Данный метод позволяет одной командой сразу и создать пользователя, и дать ему права. Но, начиная с MySQL 8, она возвращает ошибку — разработчики запретили ее использование и сначала требуется создать пользователя (с помощью CREATE USER).
> GRANT ON TO [IDENTIFIED BY ] ;
Например, эта команда предоставляет права доступа пользователю и, если его не существует, создает его:
> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;
ALL PRIVILEGES: предоставляет полные права на использование данных.
*.* : права предоставляются на все базы и все таблицы.
dbuser: имя учетной записи.
localhost: доступ для учетной записи будет предоставлен только с локального компьютера.
password: пароль, который будет задан пользователю.
WITH GRANT OPTION: будут предоставлены дополнительные права на изменение структуры баз и таблиц.
2. С помощью команды CREATE USER.
Данный метод является универсальным. Он позволяет создать пользователя в системе без каких либо прав. После права назначаются командой GRANT.
Пример создания учетной записи:
> CREATE USER ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;
После можно задать права командой:
> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’;
Посмотреть существующих пользователей и их привилегии
> SELECT user, host FROM mysql.user;
Список привилегий (для кажого пользователя смотряться отдельно):
> SHOW GRANTS FOR ‘root’@’localhost’;
* где ‘root’@’localhost’ — учетная запись, для которой смотрим привилегии; если упустить FOR, команда выдаст результат для пользователя, под которым выполнено подключение к СУБД.
Смена пароля
Команды отличаются в зависимости от версии СУБД.
MySQL
Версия 5.7.6 и более современная:
> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘New_Password’;
Версия 5.7.5 и древнее:
> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);
* посмотреть версию СУБД можно командой mysql -V.
MariaDB
В MariaDB команда для смены пароля одна, независимо от версии:
> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);
* в данном примере будет задан пароль New_Password для пользователя root.
Смена пароля пользователю root после установки
Для старых версий СУБД и новых процедуры различаются.
MySQL mysqladmin -u root password
Для смены пароля root необходимо выполнить команду в оболочке mysql по инструкции, описанной выше.
MySQL 8 и выше
Пароль создается автоматически при установке системы. Его можно посмотреть командой:
grep ‘password’ /var/log/mysqld.log
Мы увидим что-то на подобие:
2021-08-16T20:14:13.173577Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: oi25?wznro%W
* где 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. Особые права
Предоставление особых прав пользователю:
> GRANT SELECT, UPDATE ON base1.* TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;
* права на выборку и обновление данных во всех таблицах базы 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:
> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’192.168.0.55’ IDENTIFIED BY ‘password’;
* предоставит права пользователю dbuser, который будет подключаться с компьютера с IP-адресом 192.168.0.55.
3. Права на резервное копирование
Создание учетной записи MySQL с правами создания резервных копий:
> GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES ON *.* TO ‘backup’@’localhost’ IDENTIFIED BY ‘backup’;
4. Права доступа к определенной таблице
По сути, это такое же предоставление прав, но с указанием конкретной таблицы после базы:
> GRANT ALL PRIVILEGES ON base1.table1 TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;
* в данном примере предоставлены все права на таблицу table1 в базе base1.
5. Удаление пользователя
Нам может также понадобиться удалить ранее созданного пользователя. Это делается в два этапа:
> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘dbuser’@’localhost’;
> DROP USER ‘dbuser’@’localhost’;
* в данном примере мы первой командой отняли все права у пользователя dbuser (localhost) и второй — удалили его.
6. Права на создание других пользователей
Чтобы наш пользователь мог создавать других пользоватлей, задаем права:
GRANT CREATE USER ON *.* TO ‘creator’@’localhost’;
* в данном примере мы даем права учетной записи creator, которая может подключаться к серверу с локального хоста.
Если нужно, чтобы из под данной учетной записи можно было также назначать права, добавим:
GRANT CREATE USER ON *.* TO ‘creator’@’localhost’ WITH GRANT OPTION;
* обратите внимание, что мы просто добавили WITH GRANT OPTION.
Возможные ошибки
1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
Причина: в новых версиях по умолчанию активированы политики на проверку сложности пароля. Их список можно посмотреть командой:
> SHOW VARIABLES LIKE ‘validate_password%’;
Вывод команды будет, примерно, следующим:
+—————————————+———+
| 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 |
+—————————————+———+
- validate_password_check_user_name — пароль не должен совпадать с именем пользователя.
- validate_password_dictionary_file — использовать специальный файл со словарем запрещенных паролей.
- validate_password_length — минимальная длина пароля.
- validate_password_mixed_case_count — сколько, как минимум, должно быть символов в малой и большой раскладках.
- validate_password_number_count — какое минимальное количество цифр использовать в пароле.
- validate_password_policy — позволяет задать определенный набор правил. Доступны значения LOW (или 0), MEDIUM (1), STRONG (2).
- validate_password_special_char_count — минимальное количество специальных символов (например, # или !).
- Привести пароль в соответствие требованиям политик.
- Отключить политику, которая не позволяет использовать желаемый пароль. Например, чтобы отключить требование использовать цифры вводим:
> 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 и вносит исправления. Применение команды:
Источник
Как создать пользователя MySQL
По умолчанию в MySQL будет только один пользователь — root. Это администратор c доступом ко всем базам данных и таблицам внутри этих баз.
В этой статье покажем, как создать нового пользователя MySQL и присвоить ему права доступа при помощи командной строки.
Это удобно, если нужно дать доступ к конкретной таблице другому человеку, но с ограниченными правами. Например, чтобы он мог её редактировать, но не мог удалить.
Что внутри
Подключиться к серверу и зайти в MySQL
Сначала подключитесь к серверу по SSH. Обычно хостинг-провайдеры присылают логин и пароль для подключения в письме об активации хостинга. У нас это письмо называется по-разному в зависимости от типа хостинга: «Ваш виртуальный хостинг готов к использованию», «Это ваш VPS готов?» или «Выделенный сервер заказывали?».
После подключения к серверу авторизуйтесь как root пользователь MySQL с помощью команды:
Создать пользователя MySQL
В другой нашей статье мы показали, как создать базу данных MySQL. Ради примера создали в ней таблицу со списком товаров для книжного магазина. Предположим, что нужно передать управление таблицей другому человеку. Ему нужно создать нового пользователя MySQL. Используйте для этого команду CREATE USER с таким синтаксисом:
CREATE USER “ имя_пользователя “@” хост ” IDENTIFIED BY “ пароль “;
Параметр «хост» в команде означает устройство, с которого человек сможет подключаться к серверу MySQL. Здесь вы можете использовать несколько вариантов:
- localhost. Означает, что доступ к MySQL появится у пользователя только после того, как он подключится к серверу;
- IP-адрес устройства в сети, с которого человек будет подключаться к MySQL;
- %. Означает, что у пользователя будет доступ к MySQL с любого устройства.
В последних двух вариантах дополнительно подключаться к серверу не понадобится, но придётся сначала разрешить удалённые подключения в настройках MySQL.
Если не знаете, какой хост указать, используйте localhost. Это самый безопасный вариант. Придётся дополнительно подключаться к серверу, но зато злоумышленникам будет сложнее получить доступ к базе данных.
Теперь подставим в команду реальные данные. Не забудьте, что все команды в MySQL должны заканчиваться точкой с запятой .
Настроить права доступа
Пользователя создали, но он ничего не может сделать с базой данных, пока вы не назначите ему привилегии. Для этого используйте команду GRANT с таким синтаксисом:
GRANT ПРИВИЛЕГИЯ , ПРИВИЛЕГИЯ ON база_данных . таблица TO “ имя_пользователя “@” хост “;
Привилегия — это право на конкретные действия в MySQL. Например, редактирование базы данных или создание нового пользователя. Если нужно предоставить сразу несколько привилегий, пропишите их в команде через запятую.
Вот список часто используемых привилегий:
- ALL — дать все права к базе данных, кроме GRANT OPTION. Если вы не укажете название конкретной базы данных, пользователь получит полный доступ ко всему MySQL-серверу;
- CREATE — право создавать новые базы данных и таблицы;
- DELETE — право удалять строки из таблицы;
- DROP — право удалять базы данных или таблицы;
- GRANT OPTION — право назначать или отбирать права. Но получится дать или отобрать только те права, которыми владеет использующий команду пользователь;
- INSERT — право создавать строки в таблице;
- SELECT — право просматривать строки в таблицах;
- UPDATE — право менять содержание строк в таблицах.
Теперь давайте предоставим нашему пользователю bookstore_administrator привилегии на создание таблиц в базе данных bookstore. А также разрешим добавлять записи в эти таблицы:
Звёздочка в нашем примере означает «все таблицы внутри базы данных bookstore». Вы также можете заменить имя базы данных на звездочку, чтобы присвоить пользователю права для всех баз данных на сервере.
Когда закончите присваивать привилегии, перезагрузите их командой FLUSH PRIVILEGES, чтобы они вступили в силу:
Теперь посмотрим, какие доступы есть у bookstore_administrator:
Результат будет таким:
Если же через время вашему пользователю понадобятся дополнительные привилегии, добавьте их при помощи той же команды. Допустим, мы хотим дать пользователю bookstore_administrator все права.
Перезагружаем привилегии командой FLUSH PRIVILEGES и проверяем командой SHOW GRANTS:
Забрать права доступа
Если привилегии нужно наоборот забрать, запустите команду REVOKE:
REVOKE ПРИВИЛЕГИЯ ON база_данных . таблица FROM “ имя_пользователя “@” хост “;
Допустим, нам нужно забрать у пользователя bookstore_administrator право удалять таблицы в базе данных bookstore. Тогда команда будет такой:
Не забудьте после этого снова перезагрузить привилегии командой FLUSH PRIVILEGES.
Удалить пользователя MySQL
Чтобы удалить пользователя MySQL, используйте команду DROP USER:
DROP USER “ имя_пользователя “@” хост “;
Эта команда не требует дополнительного подтверждения . Пользователь базы данных удалится с первого раза и отменить это нельзя, поэтому используйте команду аккуратно.
Выйти из MySQL
В конце работы отключитесь от MySQL-сервера с помощью команды:
Источник