Работа с пользователями
Чтобы войти в phpMyAdmin от имени пользователя root MySQL, вам нужно будет переключить его метод аутентификации с auth_socket
на, mysql_native_password
если вы этого еще не сделали. Для этого откройте приглашение MySQL из вашего терминала:
sudo mysql
Затем проверьте, какой метод аутентификации каждая из ваших учетных записей пользователей MySQL использует, с помощью следующей команды:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+----------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+----------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin | *5FD2B7524254B3B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+----------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Для MySQL 8 необходимо использовать алгоритм шифрования caching_sha2_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
Затем запустите FLUSH PRIVILEGES
команду , которая скажет серверу перезагрузить таблицы грантов и применить ваши новые изменения:
FLUSH PRIVILEGES;
Проверьте методы аутентификации, используемые каждым из ваших пользователей, еще раз, чтобы убедиться, что root больше не аутентифицируется с помощью auth_socket
плагина:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Если есть желание сменить допустимую длину это можно сделать следующей командой из под MySQL
SET GLOBAL validate_password_length=4;
Подробней тут
А вот так можно отключить проверку пароля на строгость. Запустить из под MySQL
uninstall plugin validate_password;
Сброс пароля Root (для MySQL 8.0)
Перейдите в режим skip-grant-tables, для этого в конфиг пропишите
[mysqld]
skip-grant-tables
Перезагрузите MySQL
systemctl restart mysql
Войдите в консоль MySQL и сбросьте пароль
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
Войдите в снова в MySQL но уже по root
mysql -u root
в mysql:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
Отключите режим skip-grant-tables и перезагрузите MySQL
Добавить пользователя
Cоздайте нового пользователя и дайте ему надежный пароль:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Затем предоставьте новому пользователю соответствующие привилегии.
Например, вы можете предоставить пользовательские привилегии всем таблицам в базе данных, а также полномочия добавлять, изменять и удалять пользовательские привилегии с помощью этой команды:
1. Все привилегии
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
2. Только чтение
GRANT SELECT ON *.* TO 'sammy'@'localhost'
3. Чтение и добавление и удаление
GRANT SELECT, INSERT, DELETE ON *.* TO 'sammy'@'localhost'
Чтобы права вступили в силу выполняем:
FLUSH PRIVILEGES;
Вывести привилегии по пользователю
select * from mysql.user where User='sammy'\G;
Это список привилегий, которые вы можете предоставить:
Привилегия | Значение |
---|---|
ALL [PRIVILEGES] | Устанавливает все простые привилегии, кроме GRANT OPTION |
ALTER | Позволяет использовать ALTER TABLE |
CREATE | Позволяет использовать CREATE TABLE |
CREATE TEMPORARY TABLES | Позволяет использовать СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ |
DELETE | Позволяет использовать DELETE |
DROP | Позволяет использовать DROP TABLE |
EXECUTE | Не реализована |
FILE | Позволяет использовать SELECT … INTO OUTFILE и LOAD DATA INFILE |
INDEX | Позволяет использовать CREATE INDEX и DROP INDEX |
INSERT | Позволяет использовать INSERT |
LOCK TABLES | Позволяет использовать LOCK TABLES для таблиц, для которых у вас есть привилегия SELECT |
PROCESS | Позволяет пользователю видеть все процессы с помощью SHOW PROCESSLIST |
REFERENCES | Не реализована |
RELOAD | Позволяет использовать FLUSH |
REPLICATION CLIENT | Позволяет пользователю спрашивать, где находятся подчиненные или главные серверы. |
REPLICATION SLAVE | Требуется для ведомых устройств репликации (для чтения событий двоичного журнала от ведущего устройства) |
SELECT | Позволяет использовать SELECT |
SHOW DATABASES | SHOW DATABASES показывает все базы данных |
SHUTDOWN | Позволяет использовать завершение работы MySQLadmin |
SUPER | Позволяет использовать операторы CHANGE MASTER, KILL, PURGE MASTER LOGS и SET GLOBAL, команду отладки MySQLadmin; позволяет подключиться (один раз), даже если достигнуто max_connections |
UPDATE | Позволяет использовать ОБНОВЛЕНИЕ |
USAGE | Синоним привилегий |
GRANT OPTION | Позволяет предоставлять привилегии |
Если надо предоставить для внешних пользователей, надо открыть для MySQL внешний порт и вместо localhost
указывать конкретный IP по которому можно обращаться к БД.
После этого выйдите из оболочки MySQL:
exit
Теперь вы можете получить доступ к веб-интерфейсу, посетив доменное имя или публичный IP-адрес вашего сервера, а затем
/phpmyadmin
Шаг 3. Защита вашего экземпляра phpMyAdmin
Из-за своей повсеместности phpMyAdmin является популярной целью для злоумышленников, и вы должны быть особенно осторожны, чтобы предотвратить несанкционированный доступ. Один из самых простых способов сделать это — разместить шлюз перед всем приложением, используя встроенные .htaccess
функции проверки подлинности и авторизации Apache .
Для этого вы должны сначала разрешить использование .htaccess
переопределений файлов, отредактировав файл конфигурации Apache.
Отредактируйте связанный файл, который был помещен в ваш каталог конфигурации Apache:
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Добавьте AllowOverride All
директиву в <Directory /usr/share/phpmyadmin>
разделе файла конфигурации, например так:/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .
Когда вы добавите эту строку, сохраните и закройте файл.
Для реализации внесенных изменений перезапустите Apache:
sudo systemctl restart apache2
Теперь, когда вы включили .htaccess
использование для своего приложения, вам нужно создать его, чтобы реально реализовать некоторую безопасность.
Для того, чтобы это было успешно, файл должен быть создан в каталоге приложения. Вы можете создать необходимый файл и открыть его в текстовом редакторе с правами root, набрав:
sudo nano /usr/share/phpmyadmin/.htaccess
В этом файле введите следующую информацию:/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Вот что означает каждая из этих строк:
AuthType Basic
: Эта строка указывает тип аутентификации, который вы используете. Этот тип будет реализовывать аутентификацию по паролю с использованием файла паролей.AuthName
: Это устанавливает сообщение для диалогового окна аутентификации. Вы должны сохранить этот универсальный шаблон, чтобы неавторизованные пользователи не получали никакой информации о том, что защищается.AuthUserFile
: Это устанавливает местоположение файла пароля, который будет использоваться для аутентификации. Это должно быть за пределами каталогов, которые обслуживаются. Мы создадим этот файл в ближайшее время.Require valid-user
: Это указывает, что только аутентифицированным пользователям должен быть предоставлен доступ к этому ресурсу. Это то, что на самом деле мешает неавторизованным пользователям войти.
Когда вы закончите, сохраните и закройте файл.
Местоположение, которое вы выбрали для файла паролей, было /etc/phpmyadmin/.htpasswd
. Теперь вы можете создать этот файл и передать его первоначальному пользователю с помощью htpasswd
утилиты:
sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Вам будет предложено выбрать и подтвердить пароль для пользователя, которого вы создаете. После этого файл создается с введенным вами хешированным паролем.
Если вы хотите , чтобы ввести дополнительный пользователь, вам необходимо сделать это без с -c
флагом, как это:
sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Теперь, когда вы заходите в подкаталог phpMyAdmin, вам будет предложено ввести имя и пароль дополнительной учетной записи, которые вы только что настроили:
https://domain_name_or_IP/phpmyadmin

После входа в аутентификацию Apache вы попадете на обычную страницу аутентификации phpMyAdmin, чтобы ввести свои учетные данные MySQL. Эта настройка добавляет дополнительный уровень безопасности, который желателен, так как phpMyAdmin страдал от уязвимостей в прошлом.
Сброс пароля
Официальный и простой способ сбросить пароль root на сервере ubuntu…
Если вы на 16.04, 14.04, 12.04:
sudo dpkg-reconfigure mysql-server-5.5
Если вы на 10.04:
sudo dpkg-reconfigure mysql-server-5.1
Если вы не знаете, какая версия mysql-сервера установлена, вы можете попробовать:
dpkg --get-selections | grep mysql-server
Обновленные примечания для mysql-server-5.7
Обратите внимание: если вы используете mysql-server-5.7, вы не можете использовать более простой метод dpkg-reconfigure, показанный выше.
Кроме того, вы можете использовать следующее:
sudo mysql_secure_installation
Это задаст вам ряд вопросов по обеспечению вашей установки (настоятельно рекомендуется), в том числе, если вы хотите предоставить новый пароль root.
Ошибка сложного пароля
плагин, кажется, заставляет все пароли соответствовать определенным правилам.
Вот что я делаю, чтобы удалить плагин проверки пароля:
- Войдите на сервер MySQL под учетной записью root
mysql -h localhost -u root -p
- Запустите следующую команду sql:
uninstall plugin validate_password;