Тематические термины: MySQL, MariaDB.
В инструкции мы рассмотрим базовые аспекты работы с пользователями и рассмотрим некоторые примеры.
- Создание пользователя и выдача прав
- 1. С помощью команды CREATE USER.
- 2. С помощью команды GRANT.
- Посмотреть существующих пользователей и их привилегии
- Смена пароля
- MySQL
- MariaDB
- Смена пароля пользователю root после установки
- MySQL < 8 или MariaDB
- MySQL 8 и выше
- Сброс пароля для root
- Доступ по сети
- Создание учетной записи
- Настройка сервера для работы по сети
- Настройка брандмауэра
- Проверка
- Примеры работы с пользователями
- 1. Особые права
- 2. Удаленное подключение
- 3. Права на резервное копирование
- 4. Права доступа к определенной таблице
- 5. Удаление пользователя
- 6. Права на создание других пользователей
- Возможные ошибки
- Introduction
- Prerequisites
- Commands we will use
- Required privileges
- Understanding how MySQL defines and interprets user accounts
- What is MySQL’s syntax for user accounts?
- How does MySQL authenticate users?
- What are the implications of not including a user or host in a MySQL user account definition?
- How do you create users?
- Basic syntax
- How do you create a user with a password?
- How do you create a user with Unix socket authentication?
- How do you show existing users?
- How do you change existing MySQL users?
- How do you change the password for a MySQL user?
- How do you change authentication plugins for a MySQL user?
- How do you login to a local database with a password?
- How do you login to a local database with Unix socket authentication?
- How do you login to a remote database with a password?
- How do you delete MySQL users?
- Conclusion
- FAQ
- Justin Ellingwood
- Чтобы войти в систему как пользователь root в Linux:
- Как установить, изменить и восстановить пароль root MySQL
- Установка пароля в первый раз
- Изменение пароля пользователя root MySQL
- Восстановите свой пароль MySQL
- Как решить ошибку MySQL: доступ запрещен для пользователя root @ localhost
- Заключение
- Индивидуальный подход
- Гарантия качеcтва
- Решение задач любой сложности
- ПРО ЧТО «СТАТЬЯ»
- ПРИСТУПАЯ.
- ОГЛАВЛЕНИЕ
- ОСНОВНЫЕ ПОНЯТИЯ И КОМПОНЕНТЫ MySQL.
- ОСНОВНЫЕ ПРОГРАММЫ И УТИЛИТЫ MySQL.
- Полезные команды/запросы программы клиента mysql.
- ЗАПУСК И ОСТАНОВ СЕРВЕРА.
- Запуск демона mysqld при старте системы.
- Запуск/останов/перезапуск демона mysqld вручную.
- РАБОТА С УЧЕТНЫМИ ЗАПИСЯМИ ПОЛЬЗОВАТЕЛЕЙ MySQL.
- Идентификация и права доступа.
- Создание MySQL пользователей и назначение привилегий.
- СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗ ДАННЫХ (БД).
- mysqldump
- Восстановление БД из «дамп» файлов
- ОБНАРУЖЕНИЕ, ИСПРАВЛЕНИЕ ОШИБОК И ВОССТАНОВЛЕНИЕ БД ПОСЛЕ СБОЯ.
- Проверка таблиц на наличие ошибок.
- Исправление таблиц содержащих ошибки.
- Восстановление INDEX файла таблицы (*.MYI).
- Восстановление файла описания таблицы (*.frm).
- Работа с блокировками таблиц во время ремонта.
- СОЗДАНИЕ ПРОФИЛАКТИЧЕСКИХ МЕР И ПОДГОТОВКА К САМОМУ ХУДШЕМУ «СБОЮ».
- НАСТРОЙКА ОСНОВНЫХ ПАРАМЕТРОВ СЕРВЕРА.
- РАБОТА НЕСКОЛЬКИХ СЕРВЕРОВ MySQL НА ОДНОМ КОМПЬЮТЕРЕ.
- СОВЕТЫ ПО ПОВЫШЕНИЮ БЕЗОПАСНОСТИ MySQL.
- ЧТО Я ЧИТАЛ ДЛЯ НАПИСАНИЯ ЭТОЙ ЗАМЕТКИ.
- Как восстановить забытый пароль администратора?
- Как восстановить root-пользователя?
- Ссылки
- Accessing the MySQL Shell as root
- Finding the MySQL root User’s Password
Создание пользователя и выдача прав
Рассмотрим два варианта создания учетных записей в СУБД MySQL/MariaDB.
1. С помощью команды CREATE USER.
Данный метод является универсальным. Он позволяет создать пользователя в системе без каких либо прав. После права назначаются командой GRANT.
Пример создания учетной записи:
После можно задать права командой:
> GRANT <тип привилегий> ON <объект> TO <пользователь> <дополнительные опции>;
- ALL PRIVILEGES — предоставляет полные права на использование данных.
- *.* — права предоставляются на все базы и все таблицы.
- dbuser — имя учетной записи.
- localhost — доступ для учетной записи будет предоставлен только с локального компьютера.
2. С помощью команды GRANT.
Например, эта команда предоставляет права доступа пользователю и, если его не существует, создает его:
- ALL PRIVILEGES — предоставляет полные права на использование данных.
- *.* — права предоставляются на все базы и все таблицы.
- dbuser — имя учетной записи.
- localhost — доступ для учетной записи будет предоставлен только с локального компьютера.
- password — пароль, который будет задан пользователю.
- WITH GRANT OPTION — будут предоставлены дополнительные права на изменение структуры баз и таблиц.
Посмотреть существующих пользователей и их привилегии
Список привилегий (для кажого пользователя смотряться отдельно):
Смена пароля
Команды отличаются в зависимости от версии СУБД.
MySQL
Версия 5.7.6 и более современная:
Версия 5.7.5 и древнее:
* посмотреть версию СУБД можно командой mysql -V.
MariaDB
В MariaDB команда для смены пароля одна, независимо от версии:
* в данном примере будет задан пароль New_Password для пользователя root.
Смена пароля пользователю root после установки
Для старых версий СУБД и новых процедуры различаются.
MySQL < 8 или MariaDB
Первый раз пароль задается из командной строки операционной системы (для MySQL/MariaDB):
Для смены пароля root необходимо выполнить команду в оболочке mysql по инструкции, описанной выше.
MySQL 8 и выше
Пароль создается автоматически при установке системы. Его можно посмотреть командой:
grep ‘password’ /var/log/mysqld.log
Мы увидим что-то на подобие:
* где 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 он необходим.
Запускаем в безопасном режиме СУБД:
mysqld_safe —skip-grant-tables &
Запускаем оболочку sql — система не потребует пароль:
Выполняем запрос FLUSH PRIVILEGES:
> FLUSH PRIVILEGES;
Меняем пароль вышеописанным способом.
Выходим из оболочки:
Уничтожаем процесс, который запустили ранее:
После, запускаем mysql в нормальном режиме:
systemctl start mysql
systemctl start mariadb
Доступ по сети
Для успешного подключения к СУБД по сети нам нужно выполнить 3 условия:
- Создать правильную учетную запись.
- Сервер баз данных должен слушать сетевые запросы.
- Правила брандмауэра не должны блокировать доступ по порту mysql (по умолчанию 3306).
Рассмотрим выполнение данных условий по-очереди.
Создание учетной записи
Мы также можем предоставить доступ с любого узла. Это не безопасно, но если нужно, то технически возможно.
Для этого используем вместо IP знак %:
Также мы можем разрешить подключение для подсети, заменив октет знаком %, например:
* в этом случае мы получим доступ с любого компьютера в сети 192.168.0.0/24.
Не забываем данному пользователю предоставить привилении:
Настройка сервера для работы по сети
Проверить, на каком сетевом интерфейсе слушает сервер можно командой:
Если мы увидели, что запросы выполняются только на локальных адресах:
* обратите внимание, что наш сервер слушает на адресе 127.0.0.1, что означает обработку только локальных запросов.
Открываем конфигурационный файл. Раньше он находился по пути /etc/my.cnf, но теперь данный файл не содержит настроек, а просто подгружает конфигурационные файлы из каталога /etc/my.cnf.d. В зависимости от СУБД и ее версии, файлы настройки могут находиться в разных местах последнего, например:
Откроем его и задачим значение для опции bind-address:
bind-address = 0.0.0.0
* в данном примере мы разрешаем серверу слушать на любом адресе (0.0.0.0). Если нужно ограничить конкретным, то просто впишите его.
systemctl restart mysql
Настройка брандмауэра
В зависимости от утилиты управления правилами фаервола, наши действия будут отличаться.
а) Для iptables (как правило, в системах на основе deb):
iptables -I INPUT -p tcp —dport 3306 -j ACCEPT
Чтобы сохранить правила, можно использовать iptables-persistent:
б) Для firewalld (как правило, в системах на основе rpm):
firewall-cmd —permanent —add-port=3306/tcp
Проверка
Можно пробовать подключаться. Пример команды для подключения клиентом mysql к удаленному серверу:
Примеры работы с пользователями
Рассмотрим часто встречаемые операции по работе с пользователями сервера баз данных.
1. Особые права
Предоставление особых прав пользователю:
2. Удаленное подключение
Разрешение на удаленное подключение и использование базы MySQL:
Мы можем сделать менее жесткое ограничение, разрешив доступ из подсети (особенно удобно при использовании динамических адресов):
* в данном примере мы разрешим подключение для любого узла из сети 192.168.0.0/24.
Или мы можем, вовсе, разрешить водключение с любого хоста (не безопасно):
3. Права на резервное копирование
Создание учетной записи MySQL с правами создания резервных копий:
4. Права доступа к определенной таблице
По сути, это такое же предоставление прав, но с указанием конкретной таблицы после базы:
* в данном примере предоставлены все права на таблицу table1 в базе base1.
5. Удаление пользователя
Нам может также понадобиться удалить ранее созданного пользователя. Это делается в два этапа:
6. Права на создание других пользователей
Чтобы наш пользователь мог создавать других пользоватлей, задаем права:
* в данном примере мы даем права учетной записи creator, которая может подключаться к серверу с локального хоста.
Если нужно, чтобы из под данной учетной записи можно было также назначать права, добавим:
* обратите внимание, что мы просто добавили WITH GRANT OPTION.
Возможные ошибки
1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
Причина: в новых версиях по умолчанию активированы политики на проверку сложности пароля. Их список можно посмотреть командой:
> SHOW VARIABLES LIKE ‘validate_password%’;
Вывод команды будет, примерно, следующим:
- 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_upgrade -u root -p
3. ERROR 1290 (HY000): The MySQL server is running with the —skip-grant-tables option so it cannot execute this statement
Ошибка появляется при попытке посмотреть права пользователя, поменять привилегии, создать новую роль.
Причина: СУБД загружена в режиме skip-grant-tables — без загрузки таблиц разрешений.
Решение: открываем конфигурационный файл СУБД. Это может быть:
И комментируем ее:
systemctl restart mysql
Introduction
Prerequisites
Commands we will use
CREATE USER
: create a new user accountALTER USER
: make changes to an existing user accountDROP USER
: remove an existing user account
Required privileges
In order of preference, you should login using:
- A limited account that has the
CREATE USER
privilege and theSELECT
privilege on themysql
database - The
root
or administrative user that has full privileges within MySQL
Understanding how MySQL defines and interprets user accounts
What is MySQL’s syntax for user accounts?
- The user name
- The host that the user is connecting from
How does MySQL authenticate users?
Understanding how MySQL actually processes each authentication request is very important to avoid a common class of authentication problems that result from reasonable, but incorrect assumptions. This was discussed in some depth in our introduction to authentication and authorization in MySQL article.
What are the implications of not including a user or host in a MySQL user account definition?
How do you create users?
Basic syntax
How do you create a user with a password?
How do you create a user with Unix socket authentication?
Socket authentication requires the auth_socket
plugin, so first load the plugin by typing:
INSTALL PLUGIN auth_socket
You should be signed in automatically through the Unix socket authentication you configured.
How do you show existing users?
6 rows in set (0.00 sec)
It’s usually best to end the command with the
\G
statement terminator instead of the usual colon (;
) so that you can view the results a bit more clearly.
*************************** 1. row ***************************
1 row in set (0.00 sec)
How do you change existing MySQL users?
How do you change the password for a MySQL user?
How do you change authentication plugins for a MySQL user?
You can also change the mechanism or plugin used to authenticate an account.
First, identify the default authentication plugin for your server. If it’s a password-based authentication method, it’s probably best to reuse the default selection:
In this case, the default authentication plugin is
caching_sha2_password
, so we’ll use that when we switch to password authentication.
The mysql
client is a powerful command line client that can be used to connect to local and remote databases. We’ll use it to talk about how to authenticate using the methods we configured above.
How do you login to a local database with a password?
Specifying a database on the command line is optional. If none is specified, you’ll connect to the server but not to a specific database.
How do you login to a local database with Unix socket authentication?
Once you are using the correct operating system account, you can connect directly to the local database by executing the client, with no options.
As before, you can optionally append a database name to connect to a specific database you’d like.
How do you login to a remote database with a password?
If your MySQL server isn’t running on your local server, you’ll have to specify the host that the client should try to connect to. You can do that by adding the --host
option.
Most of the time, you’ll be authenticating with a password to remote MySQL servers, so the command would look something like this:
How do you delete MySQL users?
The basic syntax looks like this:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Conclusion
Security best practices dictate that you should create accounts for each unique use case, given only the level of access required to perform their scope. Account creation and authentication are the first stages of this process. In another guide, we’ll talk about granting and revoking privileges to fulfill the other part of that strategy.
FAQ
You can also set a temporary password by using:
About the Author(s)
Justin Ellingwood
Justin has been writing about databases, Linux, infrastructure, and developer tools since 2013. He currently lives in Berlin with his wife and two rabbits. He doesn’t usually have to write in the third person, which is a relief for all parties involved.
CREATE USER 'username'@'localhost' IDENTIFIED BY 'the_password';
- ALL PRIVILEGES — a full root access to the databases. If no database is specified, it has global access across the system.
- CREATE — create new tables or databases
- DROP — delete tables or databases
- DELETE — delete rows from tables
- INSERT — insert rows into tables
- SELECT — use the SELECT command to read through databases
- UPDATE — update table rows
- GRANT OPTION — grant or remove other users’ privileges
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'the_password';
And grant full root access:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
SHOW GRANTS FOR username;
5. Finally, when everything is settled, reload all the privileges:
And all the changes will take effect immediately.
New to TablePlus? It’s a modern, native tool with an elegant GUI that allows you to simultaneously manage multiple databases such as MySQL, PostgreSQL, SQLite, Microsoft SQL Server and more.
Download TablePlus for Mac.
Not on Mac? Download TablePlus for Windows.
On Linux? Download TablePlus for Linux
Need a quick edit on the go? Download TablePlus for iOS.
1) Install MariaDB
sudo apt-get -y install mariadb-server mariadb-client
sudo mysql_secure_installation (answer to some interactive questions):
Enter current password for root (enter for none): <enter>
Set root password: n
Remove anonymous users: n
Disallow root login remotely: n
Remove test database and access to it: n
Reload privilege tables now: Y
If you want to uninstall mariaDB
:
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get -y install phpmyadmin (and answer some interactive questions)
Configuring phpmyadmin:
Web server to reconfigure automatically: apache2
Configure database for phpmyadmin with dbconfig-common: Yes
MySQL application password for phpmyadmin: <blank>
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin.conf
sudo service apache2 restart
sudo dpkg-reconfigure phpmyadmin
<Ok>
Reinstall database for phpmyadmin: <Yes>
Connection method for MySQL database server for phpmyadmin: TCP/IP
Host name of the MySQL database server for phpmyadmin: localhost
Port number for the MySQL service: 3306
MySQL database name for phpmyadmin: phpmyadmin
<Ok>
MySQL username for phpmyadmin: root
MySQL application password for phpmyadmin: pass # OR ANY PASSWORD YOU WANT
Password confirmation: pass
Name of the database's administrative user: root
Web server to reconfigure automatically: apache2
An error occurred while installing the database: ignore
username: root
password: pass
you’ll be able to create databases.
Учетная запись root — это учетная запись суперпользователя, которая предлагает широкий спектр привилегий во всех базах данных MySQL. По умолчанию начальный пароль для учетной записи root — «пустой / пустой», что позволяет любому пользователю получить доступ к серверу MySQL как root.
Чтобы войти в систему как пользователь root в Linux:
- Выберите меню «Пуск»> «Выход» в правом верхнем углу. Это позволяет вам выйти из учетной записи пользователя, которую вы используете в данный момент.
- Теперь вы увидите окно входа в систему, и здесь вы входите в систему, используя имя пользователя «root» и пароль, который вы установили для пользователя root. Если в окне входа несколько пользователей, выберите других и войдите в систему.
Если пароль не установлен, или вы забыли или хотите изменить свой пароль MySQL, ниже приводится руководство о том, как установить / восстановить пароль.
Как установить, изменить и восстановить пароль root MySQL
Существует высокая вероятность того, что у вас уже есть MySQL, работающий где-то еще в вашей базе данных. В этом случае может наступить время, когда вам придется изменить или установить пароль пользователя root. Это может быть в результате того, что вы забыли пароль root или просто хотели укрепить свой пароль.
Этот процесс выполняется через командную строку и работает с установками MySQL или MariaDB. И хорошо, пока у вас есть доступ администратора, используя синтаксис sudo или su, используемый вами дистрибутив Linux не имеет значения, поскольку процесс аналогичен.
Обратите внимание: в ИТ-среде было совершено множество атак, поэтому требовались очень надежные пароли, которые я настоятельно рекомендую для ваших баз данных. Вы можете попробовать бессистемный генератор паролей, а затем сохранить пароль с помощью менеджера паролей.
Установка пароля в первый раз
Обычно во время , вам необходимо установить начальный пароль. Однако, если этого не было сделано при установке и настройке MySQL, вам сначала нужно будет установить пароль. Вот как это сделать:
- Сначала откройте окно терминала.
- После запуска терминала вставьте и выполните эту команду:
mysqladmin -u пароль root Fosslinux
Где Fosslinux — это пароль, который вы будете использовать с этого момента, это означает, что каждый раз, когда вы входите в MySQL с помощью команды mysql -u корень -p, вам нужно будет ввести пароль, который мы только что настроили.
В качестве альтернативы вы можете использовать следующий метод для установки пароля root в первый раз. Используйте команду ниже:
mysql_secure_installation
Эта команда установит пароль пользователя root и позволит вам избавиться от анонимных пользователей и тестовой базы данных. Кроме того, он также запретит удаленный вход в систему с правами root. Это, в свою очередь, дополнительно гарантирует вам конкретную безопасность вашей базы данных MySQL.
После установки пароля root MySQL в первый раз пора узнать, как его изменить.
Изменение пароля пользователя root MySQL
Чтобы изменить пароль root MySQL, выполните шаги, указанные здесь:
- Сначала создайте новый файл, используя следующую команду:
ALTER USER 'root' @ 'localhost' ОПРЕДЕЛЕННЫЙ 'Fosslinux $ 11';
Где Fosslinux $ 11 — это новый пароль, который будет использоваться. Не забудьте удовлетворить текущую политику паролей, комбинируя прописные, строчные, числовые и специальные символы.
Сохраните файл как ~ / mysql-pwd
- Затем остановите демон MySQL, используя следующую команду:
sudo systemctl остановить mysql
- Теперь, когда демон остановлен, введите и выполните следующую команду на своем терминале:
Судо mysqld -init-file = ~ / mysql-pwd
- Как только командная строка завершит выполнение указанной выше команды, продолжите и перезапустите демон MySQL, используя следующую команду:
sudo systemctl запустить mysql
- На этом этапе вы должны иметь возможность войти в командную строку MySQL, используя только что установленный пароль администратора, выполнив команду ниже:
mysql -u корень -p
Когда появится запрос, введите созданный вами пароль администратора, и все будет готово.
Теперь, когда мы плодотворно узнали, как изменить только что созданный пароль root MySQL, пришло время узнать, как восстановить забытый или утерянный пароль root MySQL.
Восстановите свой пароль MySQL
Что ж, допустим, вы забыли свой пароль пользователя root в MySQL и вам отчаянно нужно его восстановить. Все, что вам нужно сделать, это выполнить шаги, упомянутые здесь:
1. Остановите процесс сервера MySQL с помощью команды:
служба sudo mysql stop
2. Запустите сервер MySQL, используя следующую команду:
sudo mysqld_safe --skip-grant-tables --skip-network &
3. Подключитесь к серверу MySQL как пользователь root, используя команду:
mysql -u корень
Вам потребуется выполнить следующие команды MySQL, чтобы сбросить пароль root после выполнения шагов, упомянутых выше:
mysql> используйте mysql; mysql> обновить набор пользователей authentication_string = password ('NEWPASSWORD'), где user = 'root'; mysql> очистить привилегии; mysql> выйти
Примечание. Не забывайте, что НОВЫЙ ПАРОЛЬ относится к новому паролю, который вы будете использовать для входа в систему как пользователь root.
После того, как вы закончите выполнение всех команд, упомянутых выше, продолжите и перезапустите демон MySQL, используя эту команду:
перезапуск службы sudo mysql
Это все. Мы полагаем, что теперь вы можете установить, сбросить и восстановить свой пароль root MySQL.
Ключевой момент, на который следует обратить внимание: Не забудьте установить очень надежный пароль для пользователя root MySQL. Пароль, который сложно взломать. Это повысит безопасность ваших баз данных. Как вы уже знаете, в базах данных хранятся очень конфиденциальные данные, поэтому меньше всего вам нужно, чтобы кто-либо имел доступ к вашей информации без вашего согласия. Настоятельно рекомендуется использовать длинные пароли и пароли, которые сложно запомнить и угадать. Если вы используете генератор паролей для создания пароля, не забудьте сохранить его в хранилище паролей.
Как решить ошибку MySQL: доступ запрещен для пользователя root @ localhost
Это сообщение об ошибке обычно появляется для новых установок MySQL, когда вы пытаетесь подключиться к MySQL от имени пользователя root.
Вот как быстро разрешить доступ, запрещенный для пользователя root на localhost. Описанные шаги можно использовать как для MySQL, так и для MariaDB. Вам не нужно вносить изменения в какие-либо таблицы или выполнять какие-либо сложные конфигурации.
Как мы уже видели в этой статье, когда вы устанавливаете MySQL и хотите получить к нему доступ на локальном компьютере с пользователем root, вы используете следующую команду:
mysql -u корень -p
sudo mysql
Затем введите свой пароль в приглашении. Оболочка MySQL загрузится.
ALTER USER 'root' @ 'localhost' ИДЕНТИФИЦИРОВАН mysql_native_password ПО 'insert_password';
В целях обучения я изменю пароль на «Fosslinux», как показано в командной строке и выводе ниже:
ALTER USER 'root' @ 'localhost' ИДЕНТИФИЦИРОВАН mysql_native_password ПО 'Fosslinux';
Приведенная выше командная строка изменяет пароль для пользователя root и устанавливает метод аутентификации на mysql_native_password. Это традиционный способ аутентификации. К сожалению, в большинстве случаев указанная выше ошибка возникает из-за того, что используемый режим аутентификации auth_plugin что небезопасно, отсюда и ошибка.
Примечание: При вводе желаемого пароля убедитесь, что он соответствует правилам, установленным для пароля, сочетая заглавные и строчные буквы плюс цифры, если вы собираетесь ввести более надежный пароль.
перезапуск службы sudo mysql
На этом этапе вы можете снова попытаться получить доступ к MySQL с правами root. В терминале введите:
mysql -u корень -p
Заключение
В статье подробно описаны шаги по настройке, изменению и восстановлению пароля root MySQL, а также первой установке пароля root. Обязательно соблюдайте все процессы, описанные в этой статье, чтобы избежать нарушений безопасности с помощью надежных комбинаций паролей. Надеемся, статья будет полезной. Если да, поставьте отметку «Нравится» в разделе комментариев.
Индивидуальный подход
Доверительные партнерские отношения, подробное изучение сферы деятельности клиентов, особенностей организации их работы позволяют нам четко определять необходимые тактические и стратегические задачи, что поднимает наших партнеров на более высокий уровень среди конкурентов.
Гарантия качеcтва
Выполнение поставленных задач в максимально короткие сроки. Надежность и высокий профессионализм. «Прозрачная» ценовая политика. Предоставление любой информации клиенту, касающейся текущей работы и расходов. Мы полностью отвечаем за качество выполненных работ и соответствие вашим желаниям.
Решение задач любой сложности
Для нас нет ничего невозможного! Реализация любых целей по оригинальным проектам. Все работы выполняются квалифицированными специалистами, регулярно проходящими плановое обучение и аттестацию.
6 сентября 2015
Для создания пользователя с правами root можно использовать как минимум 2 варианта.
Переходим в раздел Пользователи.
Нажимаем на Добавить пользователя
Далее заполняем поля
Имя пользователя — Любое вам понравившееся
Хост — Любой
Пароль — Использовать текст
Можно с генерировать либо вписать свой «любимый» пароль
Ставим галочки как картинке ниже
2. Создать пользователя с помощью консоли.
Подключаемся по ssh.
Подключаемся к mysql
mysql -u root -p
Вводим пароль root
Мы подключились mysql, теперь нужно создать самого пользователя
Присвоим права для пользователя
Выходим из MySQL
Stanislav Krylov
s-krylov.hotbox.ru
ПРО ЧТО «СТАТЬЯ»
ПРИСТУПАЯ.
FreeBSD 5.2
shell#> mysqld -V
shell#> mysqld Ver 5.0.3-beta for portbld-freebsd5.2 on i386 (FreeBSD port: mysql-server-5.0.3_1)
ОГЛАВЛЕНИЕ
ОСНОВНЫЕ ПОНЯТИЯ И КОМПОНЕНТЫ MySQL.
каталог данных
«mysqld»
«каталога данных»
«каталог данных»
база данных
«каталога данных»
таблица — это три специальных файла размещенных внутри каталога «базы данных» для каждой таблицы.
- файл формы (описания)(.frm)
- файл данных (.MYD)
- файл индексов (.MYI)
файлы состояний MySQL
- .pid PID процесса сервера
- .err журнал ошибок
- .log общий журнал
- .nnn журнал обновлений (****)
.pid
—pid-file
.err
.log
-l|—log
.nnn
—log-bin | —log-update
Для включения «журнала обновлений» в новых версиях используется опция —log-bin. Журнал представляет собой бинарный файл и содержит всю информацию в более эффективном формате. В нем имеется информация о времени выполнения каждого обновляющего базу запроса. Просмотр этого бинарного журнала осуществляется с помощью утилиты «mysqlbinlog».
ОСНОВНЫЕ ПРОГРАММЫ И УТИЛИТЫ MySQL.
«man mysql»
«SEE ALSO»
Полезные команды/запросы программы клиента mysql.
«mysql»
mysql#> USE mysql;
mysql#> SELECT description, example FROM help_topic WHERE name=»SHOW»;
поиск описания и примеров синтаксиса оператора SHOW.
ЗАПУСК И ОСТАНОВ СЕРВЕРА.
«ручками»
«автозагрузки»
- запуск демона mysqld при старте системы с использованием конфигурационного файла rc.conf
- запуск/останов/перезапуск демона mysqld вручную
Запуск демона mysqld при старте системы.
/usr/local/etc/rc.d/mysql-server.sh
«rc.d»
rc.conf
mysqld
shell#> mv /usr/local/etc/rc.d/mysql-server.sh /etc/rc.d/mysql
shell#> chmod 555 /etc/rc.d/mysql
shell#> chown root:wheel /etc/rc.d/mysql
«/etc/rc.d/mysql»
# KEYWORD: shutdown
# KEYWORD: FreeBSD
/«etc/rc.conf»
/etc/rc.conf
«/etc/rc.d/mysql»
«rc.d»
«man rc.subr»
*
Запуск/останов/перезапуск демона mysqld вручную.
mysqld
«rc.d»
mysqladmin
**
mysqld_safe
Останов:
«pid»
Запуск:
«mysqld_safe»
«mysqld»
«my.cnf»
«mysqld»
«mysqld_safe»
«man mysqld»
«man mysqld_safe»
Список полезных опций, которыми мне приходилось часто пользоваться при работе с «mysqld_safe»:
РАБОТА С УЧЕТНЫМИ ЗАПИСЯМИ ПОЛЬЗОВАТЕЛЕЙ MySQL.
Идентификация и права доступа.
«хоста»
«пользователя»
- сервер проверяет, разрешено ли пользователю вообще подключаться к «mysqld» демону.
- если 1-й этап прошел успешно, то сервер начинает, проверяет каждый «запрос» пользователя на наличие привилегий для выполнения этого «запроса».
«user»
«mysql»
«mysqld»
«user»
«mysql»
«user»
«db»
«host»
«tables_priv»
«columns_priv»
- поля контекста.
- поля привилегий.
Поля контекста
«user»
Host,User,Password
«db»
Host,Db,User
«host»
Host, Db
«tables_priv»
Host,Db,User,Table_name
«columns_priv»
Host,Db,User,Table_name, Column_name
Для более понятного понимания значения «контекста» рассмотрим следующий пример:
Допустим в БД «mysql» в таблице «tables_priv» есть следующая запись.
Поля привилегий определяют привилегии пользователей относительно контекста.
Ниже представлена «таблица 1» возможных привилегий с кратким описанием назначений этих привилегий, с указанием типа привилегии для оператора GRANT/REVOKE и уровнем на, котором привилегия существует.
user,host,db
ENUM(‘N’,’Y’)
tables_priv
columns_priv
SET
«название столбца/значения»
ENUM
SET
Создание MySQL пользователей и назначение привилегий.
CREATE USER
DROP USER
CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] DROP USER user [, user] ...
Назначать/отнимать привилегии лучше используя, операторы GRANT и REVOKE.
GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY [PASSWORD] 'password'] [, user_name [IDENTIFIED BY 'password'] ...] [REQUIRE NONE | [{SSL| X509}] [CIPHER cipher [AND]] [ISSUER issuer [AND]] [SUBJECT subject]] [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # | MAX_UPDATES_PER_HOUR # | MAX_CONNECTIONS_PER_HOUR #]] REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...]
[тип_привилегии]
«ALL»
[имя_пользователя]
«username»
«hostname»
«%»
«любой»
«newuser»
«firma.lan»
*.*
«qwerty»
Если это описать более понятным языком, то если, хоть в одной из указанных таблиц существует разрешение на привилегию для пользователя, то пользователь сможет ей воспользоваться.
Когда устанавливается, какая либо привилегия на «глобальном уровне» то пользователь может воспользоваться этой привилегией в любой БД, поэтому привилегии на «глобальном уровне» лучше не выдавать, или выдавать только доверенным пользователям.
Сменить пароль можно с помощь оператора SET PASSWORD (***):
SET PASSWORD = PASSWORD('some password') SET PASSWORD FOR user = PASSWORD('some password')
«user»
Пример:
«mysqladmin»
СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗ ДАННЫХ (БД).
«mysqldump»
«mysqlhotcopy»
mysqldump
«mysqldump»
«дампов»
«Дамп»
«man mysqldump»
ИМХО
«mysqldump»
«-F»
«дампа»
«журнала обновлений»
«журнала обновлений»
«mysqldump»
Опцию «-x» для того чтобы создавался только один новый файл «журнала обновлений», если не поставить эту опцию то «журналы обновлений» будут создаваться для каждой БД, для которой делается «дамп», а это неудобно потому, что всё равно протоколирование изменений ведется только в один файл «журнала обновлений». (ИМХО)
Опция «-A» («дамп» всех БД) почти по той же причине, что и опцию «-x» Я не знаю как при восстановлении с использованием «журнала обновлений» выделять из этого журнала изменения только для нужной БД.
Опция «—ignore-table». Если в моей БД есть таблицы, которые не важны для меня, а исключение их из «дампа» увеличит производительность и уменьшит время создания «дампа». То я исключаю такие таблицы с помощью этой опции. Также для «неважных» БД данных лучше отключить протоколирование в «журнал обновлений». Для этого можно использовать опции «binlog-do-db» или «binlog-ignore-db».
Опцию «—opt» использую потому, что её рекомендуют использовать 🙂
Восстановление БД из «дамп» файлов
«дамп»
«mysqlhothopy»
mysqlhothopy
*5*
ОБНАРУЖЕНИЕ, ИСПРАВЛЕНИЕ ОШИБОК И ВОССТАНОВЛЕНИЕ БД ПОСЛЕ СБОЯ.
- Проверка таблиц на наличие ошибок. Если ошибки в таблице отсутствуют, процедура завершается. В любом другом случае возникает необходимость их устранения.
- Перед началом исправления создается копия файлов таблиц на случай негативного развития событий.
- Попытка исправления таблицы
- Если попытка оказывается неудачной, остается лишь восстанавливать базу данных их архива («дампа») и если есть, то из «журналов обновлений».
4
«—log-bin»
«mysqldump»
«mysqlhotcopy»
Список номеров — описаний ошибок, по которым можно предположить, что таблица повреждена:
perror 126 127 132 134 135 136 141 144 145
Проверять и восстанавливать MyISAM таблицы можно с помощью утилиты «myisamchk», а также можно использовать операторы CHECK и REPAIR.
Проверка таблиц на наличие ошибок.
[имя_таблицы]
«список_опций_проверки»
Исправление таблиц содержащих ошибки.
восстановление без модификации файла данных (.MYD);
может исправить большинство проблем за исключением несовпадения ключей;
использует старый метод восстановления, медленней чем «—recover», но может исправить некоторые случаи, в которых не помогает опция «—recover».
Восстановление INDEX файла таблицы (*.MYI).
- перейти в каталог БД, содержащий файлы поврежденной таблицы.
- скопировать файл данных таблицы (*.MYD) в безопасное место.
- запустить «mysql» и выполнить следующие команды:
- скопировать файл данных таблицы (*.MYD) обратно в каталог БД.
- выполнить команду:
- затем после восстановления выполнить операторы:
Или перезапустить демон «mysqld».
разбор пункта #3,6.
«use [имя_БД]»
[имя_БД]
«SET AUTOCOMMIT=1»
«AUTOCOMMIT»
*6*
«TRUNCATE TABLE»
«DELETE»
Оператор «FLUSH TABLE» принудительно закрывает открытую таблицу, также сбрасывается кэш запросов. Для принудительного закрытия всех таблиц можно использовать оператор «FLUSH TABLES».
Восстановление файла описания таблицы (*.frm).
- скопировать файл данных таблицы (*.MYD) в безопасное место
- восстанавливаем файл из архива или заново создать таблицу с помощью оператора «СREATE TABLE»
- снова запускам процедуру восстановления «myisamchk -r -q [имя_таблицы]»
Работа с блокировками таблиц во время ремонта.
- внутренняя блокировка
- внешняя блокировка (на уровне файловой системы)
1-я
«SELECT»
«UPDATE»
2-я
От того включена ли внешняя блокировка будет зависеть, как запускать утилиту «myisamchk» (если нельзя включить (2) то нужно использовать (1)). Просмотреть состояние внешней блокировки можно с помощью команды «SHOW VARIABLES» переменная «skip_external_locking» или «skip_locking» будет содержать значение «ON» или «OFF». Значение «ON» означает, что внешняя блокировка отключена, значение «OFF» наоборот. Для того чтобы изменить значение переменной «skip_external_locking» нужно запустить сервер «mysqld» с соответствующей опцией (по умолчанию во FreeBSD 5.2 значение «ON»).
Если значение «skip_external_locking» равно «ON» (внешняя блокировка отключена) то для выполнения проверки или восстановления с помощью утилиты «myisamchk» лучше приостановить работу сервера «mysqld» или воспользоваться внутренним механизмом блокировки (закрыть на время доступ к проверяемым таблицам с помощью «mysql» команды «LOCK TABLES»).
Для того чтобы воспользоваться внутренним механизмом блокировки для команды «myisamchk» следует:
- запустить «mysql» и выполнить команду «LOCK TABLES» для нужной (исправляемой) таблицы
- не завершая работы «mysql» запустить утилиту «myisamchk» с нужными опциями проверки/исправления
- по окончанию работы утилиты «myisamchk» нужно вернуться к сессии «mysql» выполнить команду «FLUSH TABLES» и снять блокировку «UNLOCK TABLES»
«LOCK»
- «LOCK TABLE [имя_таблицы] [READ | WRITE]». Если установлено «READ» для некоторой таблицы, то только этот поток (и все другие потоки) могут читать из данной таблицы. Если для некоторой таблицы установлена блокировка «WRITE», тогда только этот поток, содержащий блокировку, может осуществлять операции чтения «READ» и записи «WRITE» заблокированной таблицей. Остальные потоки блокируются. То есть простыми словами если нам нужно просто проверить таблицу, то устанавливаем блокировку «READ», но а если исправить, то устанавливаем «WRITE».
- после того, как закончили проверку/ремонт таблицы, выполняем команду «FLUSH TABLES» для того чтобы сбросить кэш таблиц.
- выполнить команду «UNLOCK TABLES» когда нужно будет снять блокировку.
СОЗДАНИЕ ПРОФИЛАКТИЧЕСКИХ МЕР И ПОДГОТОВКА К САМОМУ ХУДШЕМУ «СБОЮ».
- проверка таблиц при загрузке системы (полезно при сбоях питания)
- проверка таблиц по расписанию во время работы сервера «mysqld».
- создание резервных копий БД.
пункт 3
Было бы не плохо, если после создания каждой резервной копии БД «журнал обновлений» обнулялся — это сделает восстановление
более ясным
«последняя_резервная_копия_БД»
«БД_с_минимальным_количеством_потерянных_записей»
ИМХО лучше с помощью опций «—binlog-do-db», «—binlog-ignore-db» исключить из протоколирования БД для, которых восстановление не важно.
Вот как я решил организовать три пункта своей стратегии:
пункт #1
«проверка таблиц при загрузке системы»
Так как для загрузки демона MySQL я использую «rc.d» систему FreeBSD, то логично было бы, встроить проверку таблиц в скрипт «/etc/rc.d/mysql» это также даcт возможность вынести нужные опции проверки в главный конфигурационный файл FreeBSD — /etc/rc.conf.
Конечно, можно не встраивать проверку таблиц в стартовый скрипт «/etc/rc.d/mysql», помня то — что «/etc/rc.d/mysql» просто запускает другой скрипт «mysqld_safe», а тот в свою очередь уже имеет нужные строчки по проверке таблиц их только нужно найти и раскомментировать. Но мне хотелось, чтоб этой проверкой я мог управлять через «rc.conf».
Пример: моего «/etc/rc.d/mysql»:
4 #!/bin/sh 5 # PROVIDE: mysql 6 # REQUIRE: NETWORKING SERVERS 7 # BEFORE: DAEMON 8 # KEYWORD: FreeBSD 9 # 10 # Add the following line to /etc/rc.conf to enable mysql: 11 # mysql_enable (bool): Set to "NO" by default. 12 # Set it to "YES" to enable MySQL. 13 # mysql_limits (bool): Set to "NO" by default. 14 # Set it to yes to run `limits -e -U mysql` 15 # just before mysql starts. 16 # mysql_dbdir (str): Default to "/var/db/mysql" 17 # Base database directory. 18 # mysql_args (str): Custom additional arguments to be passed 19 # to mysqld_safe (default empty). 20 # 21 . /etc/rc.subr 22 name="mysql" 23 rcvar=`set_rcvar` 24 load_rc_config $name 25 : ${mysql_enable="NO"} 26 : ${mysql_limits="NO"} 27 : ${mysql_dbdir="/var/db/mysql"} 28 : ${mysql_args=""} 34 mysql_user="mysql" 35 mysql_limits_args="-e -U ${mysql_user}" 36 pidfile="${mysql_dbdir}/`/bin/hostname`.pid" 37 command="/usr/local/bin/mysqld_safe" 38 command_args="--defaults-extra-file=${mysql_dbdir}/my.cnf --user=${mysql_user} --datadir=${mysql_dbdir} --pid-file=${pidfile} ${mysql_args} > /dev/null &" 39 procname="/usr/local/libexec/mysqld" 40 start_precmd="${name}_prestart" 41 mysql_install_db="/usr/local/bin/mysql_install_db" 42 mysql_install_db_args="--ldata=${mysql_dbdir}" 43 mysql_create_auth_tables() 44 { 45 eval $mysql_install_db $mysql_install_db_args >/dev/null 46 [ $? -eq 0 ] && chown -R ${mysql_user}:${mysql_user} ${mysql_dbdir} 47 } 48 mysql_prestart() 49 { 50 if [ ! -d "${mysql_dbdir}/mysql/." ]; then 51 mysql_create_auth_tables || return 1 52 fi 53 if checkyesno mysql_limits; then 54 eval `/usr/bin/limits ${mysql_limits_args}` 2>/dev/null 55 fi 68 } 69 run_rc_command "$1"
Строчки «29-32» это задание значений по умолчанию для опций, которые можно прописать в файле «/etc/rc.conf» и с их помощью управлять поведением «myisamchk».
mysql_myisamck
Может принимать значения YES или NO. Если значение YES то пред запуском «mysqld» будет проходить проверка всех таблиц в «каталоге данных».
mysql_myisamck_args
Строка аргументов, которые будут переданы утилите «myiasmchk». По умолчанию заданы аргументы «-s -C». «-s» — обозначает работу в «тихом» режиме то есть на STDOUT будет выводиться информация, только в случае если в таблицах будет найдена ошибка. «-С» обозначает, что проверка будет происходить только тех таблица в которых были изменения после последней проверки.
mysql_myisamck_mail_subj
Текстовая строка, которая будет темой в письме уведомлении, которое будет отправляться, в случае если в таблицах будет найдена ошибка.
mysql_myisamck_mail_toaddr
Адрес электронной почты, куда будет послано письмо уведомление.
Строка «33» задает путь к утилите «myisamchk».
Строки «56-67» собственно и есть код проверки таблиц и отправки письма в случае нахождения ошибок в таблицах.
пункт #2
«проверка таблиц по расписанию во время работы сервера»
Реализовать пункта #2 можно разными способами, лично я решил это сделать так:
- написать свой скрипт проверки таблиц.
- в «crontab» прописать расписание выполнения этого скрипта.
Пример:
«/etc/mysqld/cronchmysql.sh»
#!/bin/sh : ${mysql_dbdir="/var/db/mysql"} : ${mysql_myisamck_args="-s -c"} : ${mysql_myisamck_mail_subj="Cron verification: MySQL databases include error!!!"} : ${mysql_myisamck_mail_toaddr="root@localhost"} command_path="/usr/local/bin/myisamchk" MAILTO="" SAVE_IFS="$IFS" IFS="" errmes=`eval ${command_path} ${mysql_myisamck_args} ${mysql_dbdir}/*/*.MYI 2>&1` IFS="$SAVE_IFS" if [ "$errmes" ]; then echo "$errmes" | /usr/bin/mail -s "${mysql_myisamck_mail_subj}" "${mysql_myisamck_mail_toaddr}" fi exit 0;
«mysql_dbdir»
«каталогу данных»
Второе еще проще, чем первое придумываем расписание, по которому будет запускать проверку таблиц. У меня БД ночью почти не используются, поэтому я решил проверку по расписанию назначить один раз в неделю (суббота) в 4 часа утра. Для этого добавил в «crontab» следующею строчку:
пункт #3
«создание резервных копий БД»
Для реализации пункта #3 я буду использовать описанную выше утилиту «mysqldump».
и как для пункта #2.1 снова будет написан небольшой скрипт, который будет реализовывать следующие действия:
- вызывать «mysqldump» для создания копии всех баз данных с обязательным обнулением «журнала обновлений»
- созданная копия БД будет сжиматься с помощью «bzip2».
- администратору будет высылаться на электронную почту уведомление, содержащее отчет о выполненных действиях и дополнительную информацию.
Пример:
«/etc/mysqld/cronbkmysql.sh»
#!/bin/sh path_bzip2="/usr/bin/bzip2" path_mysqldump="/usr/local/bin/mysqldump" opt_mysqldump="-x -F --opt -A" backup_dst_dir="/backup/mysql-db" mysql_dbdir="/var/db/mysql" mail_subj="MySQL databases have been backuped!" mail_toaddr="root@localhost" ################################################ umask 0066 MAILTO="" date_dmy=`date "+%d%m%Y"` cd ${mysql_dbdir} date_HM=`date "+%H:%M:%S"` eval "${path_mysqldump} ${opt_mysqldump} 2> ${backup_dst_dir}/dbbackup.out | ${path_bzip2} > ${backup_dst_dir}/${date_dmy}-db.sql.bz2" date_HMend=`date "+%H:%M:%S"` jupdate=`tail -n 1 ${mysql_dbdir}/*.index 2>/dev/null` dbdirsize=`du -hc ${mysql_dbdir}` archsize=`du -hc ${backup_dst_dir}/${date_dmy}-db.sql.bz2 | tail -n 1` echo "--------------------[ ${date_dmy} ]-------------------" >> ${backup_dst_dir}/dbbackup.out echo -e "New name update juurnal it is:\t${jupdate}" >> ${backup_dst_dir}/dbbackup.out echo -e "Backup starting:\t\t${date_HM}" >> ${backup_dst_dir}/dbbackup.out echo -e "Backup end:\t\t\t${date_HMend}" >> ${backup_dst_dir}/dbbackup.out echo -e "Archiv folder:\t\t\t${backup_dst_dir}" >> ${backup_dst_dir}/dbbackup.out echo -e "Archiv file:\t\t\t${date_dmy}-db.sql.bz2" >> ${backup_dst_dir}/dbbackup.out echo -e "Archiv file size:\t\t${archsize}" >> ${backup_dst_dir}/dbbackup.out echo -e "DB diretory size:\n${dbdirsize}" >> ${backup_dst_dir}/dbbackup.out echo "---------------------------------------------------" >> ${backup_dst_dir}/dbbackup.out cat ${backup_dst_dir}/dbbackup.out | /usr/bin/mail -s "${mail_subj}" "${mail_toaddr}" exit 0;
НАСТРОЙКА ОСНОВНЫХ ПАРАМЕТРОВ СЕРВЕРА.
«каталогу данных»
Описание каждой этой опции есть в документации MySQL (http://dev.mysql.com/doc/refman/4.0/ru/command-line-options.html) поэтому я опишу только несколько опций, которые полезно использовать в частных случаях:
—skip-networking
эту опцию полезно включать, если вы решили не предоставлять доступ по сети к базам данных. При включении этой опции соединиться сервером можно будет, только используя UNIX SOCKET.
РАБОТА НЕСКОЛЬКИХ СЕРВЕРОВ MySQL НА ОДНОМ КОМПЬЮТЕРЕ.
Официальное мнение читаем здесь http://dev.mysql.com/doc/refman/4.0/ru/installing-many-servers.html.
port = 3306 socket = /tmp/mysql.sock
«каталог данных»
/var/db/mysql
Для запуска второго сервера создадим для этого сервера новый «каталог данных» используя скрипт «mysql_install_db», который устанавливается при установке сервера mysqld, новый конфигурационный файл «/etc/mysqld3307.cnf», и нового системного пользователя «mysql3307»:
«—ldata=/var/db/mysql3307»
«каталог данных»
«—user=mysql3307»
«каталогом данных»
«mysql3307»
/stand/sysinstall
port = 3307 socket = /tmp/mysql3307.sock
*7*
3307
UNIX SOCKET /tmp/mysql3307.sock
«каталог данных»
«/var/db/mysql3307»
«/etc/mysqld3307/mysqld3307.cnf»
*8*
СОВЕТЫ ПО ПОВЫШЕНИЮ БЕЗОПАСНОСТИ MySQL.
Securing MySQL step-by-step: http://www.securityfocus.com/infocus/1726
Secure MySQL Database Design: http://www.securityfocus.com/infocus/1667
Securing Your MySQL Installation: http://www.kitebird.com/articles/ins-sec.html
и естественно нужно просмотреть http://dev.mysql.com/doc/refman/5.0/en/security.html
- Следить за последними обновлениями (заплатками) MySQL.
- Ограничить с помощью брандмауэра, доступ по сети к серверу MySQL, разрешив доступ к серверу только с доверенных/нужных хостов.
- Удалить из таблицы User «анонимного» пользователя.
- Переименовать учетную запись root пользователя MySQL, во что нибудь другое и задать учетной записи root сложный пароль.
- Для каждого web приложения требующего MySQL желательно создавать отдельную учетную запись.
- Привилегии глобального уровня выдавать пользователям только в случае крайней необходимости.
- Привязать доступ пользователей MySQL к БД только заранее определенных хостов (поле host в таблице User) и исключить использование пользователями пустых паролей.
- Запускать демон «mysqld» под системной учетной записью обладающую минимальными правами (под FreeBSD демон «mysqld» по умолчанию запускается с правами пользователя «mysql»).
- Запускать демон «mysqld» с опцией «—chroot» это позволит ограничить доступ к файлам, находящимися выше «chroot» директории для операторов «LOAD DATA INFILE» и «SELECT . INTO OUTFILE». (*9*)
- Установить для «каталога данных» и «журналов» MySQL разрешения на доступ и просмотр только для пользователя, под которым работает демон «mysqld».
- С большой осторожностью выдавайте пользователям привилегии «File_priv» (*9*), «Grant_priv» (*10*) и «Alter_priv»
- Включить опцию «—skip-show-database».
ЧТО Я ЧИТАЛ ДЛЯ НАПИСАНИЯ ЭТОЙ ЗАМЕТКИ.
- MySQL, Поль Дюбуа (Paul DuBois), Издательский дом «Вильямс»
- Hackproofing MySQL, Chris Anley
- http://dev.mysql.com/doc/refman/4.0/ru/
- http://dev.mysql.com/doc/refman/5.0/en/
- man mysqld
- man mysqld_safe
- mysqldump —help
(*) В действительности скрипт «/etc/rc.d/mysql» запускает другой скрипт «mysqld_safe» который в свою очередь запускает демон «mysqld» с параметрами, которые ему передаются с помощью опции «command_args» заданной в rc скрипте. Также в скрипте «/etc/rc.d/mysql» осуществляется проверка на наличие в «каталоге данных» базы данных mysql и таблиц аутентификации если они отсутствуют то создается БД mysql с нужными таблицами.
(*5*) Для проверка установлен ли перл модуль DBI можно воспользоваться командой:
shell#>perl -MDBI -e 1
установить модуль DBI можно из порта:
/usr/ports/databases/p5-DBI
(*7*) Рекомендую обратить внимание на «mysqld_safe» опции: «—defaults-extra-file=path» и «—defaults-file=path» в «man mysqld_safe».
(*8*) Используя опцию «—ledir» можно запускать разные версии демонов «mysqld».
(*9*) Операторы «LOAD DATA INFILE» и «SELECT . INTO OUTFILE» опасны тем, что возможно выполнить следующий «ФИНТ»:
mysql#> create table foo( line blob );
mysql#> load data infile ‘/etc/passwd’ into table foo;
mysql#> select * from foo;
или
mysql#> select load_file(‘/etc/passwd’);
поэтому если эти операторы разрешены то необходимо их ограничить используя опцию «—chroot»
(*10*) Если пользователь наделен привилегией «Grant_priv» то он может предоставлять другим пользователям свои прова. Например: Если предоставить одному пользователю только привилегию SELECT, а второму SELECT и GRANT то второй пользователь может сделать первого пользователя «более продвинутым».
Writed by Krylov Stanislav aka Dragon
(November 2005)
В данной статье описывается что делать если вы забыли администраторский пароль или случайно удалили самого root-пользователя. Статья ориентирована в первую очередь на новичков, поэтому описание всех действий изложено очень подробно, однако материал может оказаться небезынтересен и для более опытных пользователей.
Как восстановить забытый пароль администратора?
Пароли хранятся в базе в зашифрованном виде, поэтому восстановить забытый пароль нельзя, однако можно установить новый. Для этого нужно:
- Перезапустить сервер в режиме —skip-grant-tables
- Установить новый пароль администратора
- Перезапустить сервер в обычном режиме
Примечание. Обратите внимание, что другие пользователи, подключившие до выполнения вами команды или перезагрузки сервера в обычном режиме, также будут обладать администраторскими правами.
MySQL сервер хранит информацию о привилегиях в таблицах привилегий служебной базы mysql. При старте сервера, содержимое таблиц привилегий загружается в память и в дальнейшей работе используется копия, находящаяся в памяти. Команда обновляет данные о привилегиях, загруженные в память. Таким образом, данная команда отменяет режим skip-grant-table и включает проверку прав доступа и привилегий.
Примечание. Обратите внимание, что если вы напрямую редактируете содержимое таблиц привилегий базы mysql, с помощью команд , , , то изменения сразу не вступят в силу, так как информация о пользовательских привелегиях, загруженная в память, останется неизменной.
Если использовать рекомендованные команды типа или , то изменения вступят в силу незамедлительно.
Примечание. Обратите внимание, что изменение прав пользователей не распространяется на уже установленные соединения пользователей. Если нужно отнять у кого-то права, то после следует убедиться, что он не подключен к серверу (с помощью SHOW FULL PROCESSLIST), а если подключен, то убить его поток (оператором ).
Затем перезапустить сервер.
Дальнейшие действия будут зависеть от используемого вами клиента:
- Если ваш клиент не разрывает соединение после выполнения каждой команды как, например, родной клиент mysql, то первым делом выполняем команду , которая загружает в память таблицы грантов. Затем с помощью команд или назначаем пароль администратору: Данный вариант действий является предпочтительным.
- Если ваш клиент разрывает соединение после выполнения каждой команды, например, Query Browser, то после выполнения он будет требовать указать пароль, который мы ещё не успели назначить. Назначить сначала пароль с помощью команд или не получится, так как в режиме skip-grant-tables их нельзя использовать. (Выше уже указывалось, что отменяет данный режим, поэтому в предыдущем пункте данные команды работают.) Остается единственно возможный способ это напрямую изменять данные в таблице mysql.user
Как восстановить root-пользователя?
Если root-пользователь (пользователь, обладающий всеми возможными прривилегиями, как правило имеет имя root) был по неосторожности удален, то последовательность действий аналогична предыдущему разделу за исключением того, что вместо назначения пароля необходимо будет создать root-пользователя. Т.е. в режиме skip-grant-tables в зависимости от используемого вами клиента действуем одним из нижеследующих способов:
- Затем добавляем root-пользователя с помощью команды
- Создаем root-пользователя путем прямого добавления записи в таблицу mysql.user. Обратите внимание, что структура таблицы mysql.user в разных версиях различна. Перед добавлением изучите её с помощью команд или . Например, для версии 5.1.21-beta-community добавление root-пользователя производится следующей командой:
Ссылки
В официальной документации описан оригинальный способ восстановления администраторского пароля. Подробнее см. How to Reset the Root Password
Accessing the MySQL Shell as root
sudo -i mysql
/root/.my.cnf
Finding the MySQL root User’s Password
sudo cat /root/.my.cnf
The contents of that file look like this:
[client] user = root password = MYSQL_ROOT_PASSWORD_HERE