Задача: Создать базу данных в MySQL. Создать пользователя в MySQL. Присвоить новой базе данных, права нового пользователя. Все операции через консоль на Ubuntu Server 18.04.
В моем случае на ПК установлена Ubuntu 16.04 (c интерфейсом unity) и еще поднято куча виртуальных ПК с xubuntu 18.04 и xubuntu 20.04.
В случае если на основном ПК Windows рекомендую использовать программу putty.
Исходные данные:
Имеем VPS с установленным на нее:
OS: Ubuntu Server 18.04.06
Web: Apache/2.4.29
DB: mysql-server 5.7.39
PHP: 7.2.24
Доступ к VPS по ssh
Подключаемся к серверу по ssh:
1 |
ssh server -lusername -p22 |
В примере показано стандартное подключение к серверу по ssh используя логин и пароль.
server — меняем на название своего сервера или IP;
username — меняем на имя своего пользователя
-p22 — стандартный порт ssh 22, в таком случае эту опцию можно не указывать. если порт изменен на не стандартный, например 2233, тогда опция будет выглядеть -p2233.
Так же можно подключатся по публичному ключу, в данном примере не рассматривается.
Создаем базу данных, пользователя, подключаем пользователя к базе через консоль на MySQL
Подключаемся к mysql:
1 |
sudo mysql |
Если доступ к серверу по root (что не рекомендуется), просто вводим mysql.
Если имя пользователя отлично от root, то username должен иметь sudo.
Вводим пароль sudo и получаем вывод:
1 |
mysql> |
Просмотреть список баз данных:
1 |
mysql> show databases; |
Создаем базу данных, например db_test_1:
1 |
CREATE DATABASE db_test_1 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
Не забываем в конце ставить знак ; (точку с запятой)
Создаем пользователя для нашей базы данных db_test_1, c именем пользователя db_user_test и паролем для этого пользователя password_test
1 |
CREATE USER 'db_user_test'@'%' IDENTIFIED WITH mysql_native_password BY 'password_test'; |
Присваиваем нашей базе db_test_1 пользователя db_user_test:
1 |
GRANT ALL ON db_test_1.* TO 'db_user_test'@'%'; |
Все пользователи MySQL, имеющие доступ только к локальным подключениям, имеют учетную запись вида user@localhost. Чтобы разрешить пользователю подключаться удаленно, нужно добавить для него учетную запись user@нужный_IP (или user@%, тогда будет возможно подключение с любого IP).
В нашем случае если доступ из мира к стандартному порту 3306 открыт, то можно подключатся.
Обновляем данные:
1 |
FLUSH PRIVILEGES; |
Выходим из консоли mysql:
1 |
mysql> quit; |
в целях безопасности для каждой базы данных лучше создавать отдельных пользователей.
Теперь смело можно устанавливать например wordpress с новыми данными.
Если подключение локальное то в поле сервере указывать localhost если удаленное, то данные сервера, например: db.my_db_server.com или по IP.
Дополнение:
Для того, чтобы создаваемый пользователь мог подключаться к конкретной базе с любого адреса, используйте команду:
1 |
mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO 'имя_пользователя'@'%' IDENTIFIED BY 'пароль'; |
Если нужно, чтобы пользователь мог подключаться только с определенного адреса, укажите его вместо %, например:
1 |
mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO 'имя_пользователя'@'123.45.67.8' IDENTIFIED BY 'пароль'; |
В случае открытия доступа в мир при установке или настройке mysql server.
Если пользователю нужно подключение ко всем базам вместо одной конкретной:
1 |
mysql> GRANT ALL PRIVILEGES ON *.* TO 'имя_пользователя'@'123.45.67.8' IDENTIFIED BY 'пароль'; |
Ограничение доступа из мира средствами firewall на Ubuntu 18.04:
Если используется iptables:
1 |
sudo iptables -A INPUT -s 95.45.67.8 -p tcp --destination-port 3306 -j ACCEPT |
* 95.45.67.8 заменить на свой, если он статический конечно.
Если используется UFW:
1 |
sudo ufw allow from 123.45.67.8 to any port 3306 |
* 95.45.67.8 заменить на свой, если он статический конечно.
Проверить, что пользователь может подключиться к MySQL удаленно.
1 |
mysql -u имя_пользователя -h адрес_сервера_mysql название_базы -p |
Еще можно использовать ключ -P port если порт отличный от стандартного для mysql 3306.
На этом, пожалуй все.