Цель урока: Научиться выполнять базовые, но самые важные административные задачи внутри сервера баз данных. Мы освоим SQL-команды для создания новой базы данных, создания нового пользователя и, что самое главное, для выдачи этому пользователю строго ограниченных прав только на его базу данных.

Часть 1: Теория. Принцип изоляции

Представьте, что ваш сервер MariaDB - это большой банк с множеством сейфовых ячеек.

  • База данных (Database): Это отдельная, изолированная сейфовая ячейка. Данные одного сайта (например, site_one_db) хранятся в одной ячейке и никак не пересекаются с данными другого сайта (site_two_db), которые лежат в соседней. Для каждого сайта всегда создается своя собственная, отдельная база данных.

  • Пользователь (User): Это клиент банка. Но в отличие от root-пользователя БД, у которого есть мастер-ключ от всех ячеек, обычный пользователь - это простой клиент.

  • Привилегии (Privileges): Это ключ от конкретной ячейки, который вы выдаете клиенту.

Золотое правило безопасности:

Никогда не используйте root-пользователя БД в конфигурационных файлах ваших сайтов! Это все равно что оставить мастер-ключ от всего банка под ковриком. Если ваш сайт взломают, злоумышленник получит доступ ко всем базам данных на сервере.

Правильный подход - это принцип наименьших привилегий:

  1. Для сайта site_one мы создаем отдельную базу данных site_one_db.

  2. Для этого же сайта мы создаем отдельного пользователя site_one_user с надежным паролем.

  3. Мы выдаем пользователю site_one_user ключ (привилегии) только от его сейфовой ячейки site_one_db. Он не сможет даже "посмотреть" на существование других ячеек.

Часть 2: Практика. Работа в консоли mariadb

Все следующие шаги выполняются внутри консоли сервера баз данных.

Шаг 1: Вход в консоль

Подключаемся к серверу баз данных от имени root.

# Эта команда работает без пароля, так как мы используем unix_socket аутентификацию
mariadb

Ваша командная строка изменится на MariaDB [(none)]>.

Шаг 2: Создание новой базы данных

Давайте создадим базу данных для нашего будущего сайта. Назовем ее my_website_db.

Синтаксис: CREATE DATABASE [имя_базы_данных];

CREATE DATABASE my_website_db;
  • CREATE DATABASE: Команда SQL.

  • my_website_db: Имя, которое мы придумали.

  • ;: Точка с запятой в конце - обязательна!

Ответ сервера: Query OK, 1 row affected ... означает, что все прошло успешно.

Проверка:

SHOW DATABASES;

Теперь в списке баз данных, помимо системных, вы должны увидеть и вашу новую my_website_db.

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

Теперь создадим "клиента" для этой базы. Назовем его my_website_user. Ему нужно задать надежный пароль.

Синтаксис: CREATE USER '[имя_пользователя]'@'localhost' IDENTIFIED BY '[пароль]';

CREATE USER 'my_website_user'@'localhost' IDENTIFIED BY 'a_very_strong_password';

Разбор команды:

  • CREATE USER 'my_website_user': Создаем пользователя. Имя пользователя принято брать в одинарные кавычки.

  • @'localhost': Это очень важная часть! Она означает, что этот пользователь сможет подключаться к серверу баз данных только "изнутри", с этого же сервера (с localhost). Это максимально безопасный вариант. Веб-сервер и база данных находятся на одной машине, поэтому внешнего доступа ему не нужно.

  • IDENTIFIED BY '...': Задаем пароль для этого пользователя. Замените a_very_strong_password на свой собственный, сложный пароль.

Шаг 4: Выдача привилегий (выдаем ключ от ячейки)

Сейчас наш my_website_user существует, но он ничего не может делать. Он как клиент, который зарегистрировался в банке, но еще не получил ключ от ячейки.

Синтаксис: GRANT [какие_права] ON [какая_база_данных].* TO '[пользователь]'@'localhost';

GRANT ALL PRIVILEGES ON my_website_db.* TO 'my_website_user'@'localhost';

Разбор команды:

  • GRANT ALL PRIVILEGES: "Выдать все права". Это стандартная практика для пользователя, который должен полностью управлять своим сайтом. Он сможет создавать таблицы, читать, записывать, обновлять и удалять данные.

  • ON my_website_db.*: "На все (*) таблицы внутри базы данных my_website_db". Мы даем ему полный контроль, но только в пределах его собственной "сейфовой ячейки".

  • TO 'my_website_user'@'localhost': "Кому именно" мы выдаем эти права.

Шаг 5: Применение изменений

Чтобы сервер баз данных немедленно "узнал" о новых правах, нужно выполнить специальную команду.

FLUSH PRIVILEGES;

Шаг 6: Выход из консоли root

Наша административная работа закончена.

exit;

Часть 3: Практика. Проверка работы нового пользователя

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

Шаг 1: Попытка входа под новым пользователем

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

# mariadb -u [имя_пользователя] -p
mariadb -u my_website_user -p
  • -u: Указывает имя пользователя.

  • -p: Говорит клиенту, что мы будем вводить пароль.

Система запросит Enter password:. Введите тот пароль, который вы задали на Шаге 3.

Если все верно, вы войдете в консоль, и строка приглашения будет выглядеть так: MariaDB [(none)]>.

Шаг 2: Проверка прав

  1. Попробуем посмотреть все базы данных:

    SHOW DATABASES;

    Результат: Вы увидите только information_schema и вашу my_website_db. Вы не видите системные базы (mysqlperformance_schema) и базы других пользователей. Это доказывает, что изоляция работает! 

  2. Выберем нашу базу для работы:

    USE my_website_db;

    Командная строка изменится на MariaDB [my_website_db]>.

  3. Попробуем создать в ней таблицу (у нас есть на это права):

    CREATE TABLE test_table (id INT);

    Команда должна выполниться с Query OK.

  4. Попробуем создать другую базу данных (у нас нет на это прав):

    CREATE DATABASE another_db;

    Вы получите ошибку: ERROR 1044 (42000): Access denied for user 'my_website_user'@'localhost' to database 'another_db'. Это идеальный результат! Система не дала нашему пользователю выйти за пределы его "песочницы".

Шаг 5: Выход

exit;

Часть 4: Заключение

Поздравляю! Вы освоили фундаментальные принципы управления доступом в MySQL/MariaDB. Это один из важнейших навыков для обеспечения безопасности ваших веб-приложений. Вы научились:

  • Следовать принципу изоляции: отдельная база и отдельный пользователь для каждого сайта.

  • Использовать SQL-команду CREATE DATABASE для создания новой базы.

  • Использовать CREATE USER для создания пользователя, ограниченного подключением с localhost.

  • Использовать GRANT для выдачи пользователю прав только на его собственную базу данных.

  • Проверять на практике, что ограничения прав действительно работают.

На следующем, 49-м уроке, мы научимся делать резервные копии (бэкапы) наших баз данных. Мы освоим утилиту mysqldump, которая позволяет создавать полный "снимок" базы данных в виде текстового файла, и научимся восстанавливать базу из этого файла.

Перейти к просмотру - УРОК №49.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)