Управление пользователями и привилегиями в MySQL

MySQLMySQLBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) мы рассмотрим управление пользователями и привилегиями в MariaDB, которые являются важными навыками для обеспечения безопасности вашей базы данных. Вы научитесь создавать и управлять учетными записями пользователей, назначать соответствующие привилегии и просматривать разрешения. С помощью практических упражнений вы получите практический опыт в выполнении этих важных операций по безопасности базы данных и поймете, как реализовать базовые меры безопасности в MariaDB. Эти знания являются фундаментальными для любого администратора базы данных, чтобы обеспечить правильный контроль доступа и защиту данных.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/DatabaseFunctionsandDataTypesGroup(["Database Functions and Data Types"]) mysql(("MySQL")) -.-> mysql/TransactionManagementandSecurityGroup(["Transaction Management and Security"]) sql(("SQL")) -.-> sql/DatabaseManagementandOptimizationGroup(["Database Management and Optimization"]) mysql/DatabaseFunctionsandDataTypesGroup -.-> mysql/user("User Info Function") mysql/TransactionManagementandSecurityGroup -.-> mysql/identified_by("User Authentication") mysql/TransactionManagementandSecurityGroup -.-> mysql/grant_permission("Permission Granting") mysql/TransactionManagementandSecurityGroup -.-> mysql/revoke_permission("Permission Revocation") sql/DatabaseManagementandOptimizationGroup -.-> sql/security_permissions("Security and Permissions") subgraph Lab Skills mysql/user -.-> lab-418308{{"Управление пользователями и привилегиями в MySQL"}} mysql/identified_by -.-> lab-418308{{"Управление пользователями и привилегиями в MySQL"}} mysql/grant_permission -.-> lab-418308{{"Управление пользователями и привилегиями в MySQL"}} mysql/revoke_permission -.-> lab-418308{{"Управление пользователями и привилегиями в MySQL"}} sql/security_permissions -.-> lab-418308{{"Управление пользователями и привилегиями в MySQL"}} end

Создание и управление учетными записями пользователей

Сначала подключитесь к MySQL в качестве root:

sudo mysql -u root

Создание пользователей

Создадим пользователей с разными шаблонами доступа:

-- Создать пользователя, который может подключаться только с локального хоста
CREATE USER 'hr_user'@'localhost' IDENTIFIED BY 'hr123';

-- Создать пользователя, который может подключаться с любого хоста
CREATE USER 'reports_user'@'%' IDENTIFIED BY 'reports123';

-- Создать пользователя без пароля (не рекомендуется для продакшена)
CREATE USER 'intern'@'localhost';

@'localhost' ограничивает подключения только к локальной машине, в то время как @'%' позволяет подключаться с любого хоста. Создание пользователей без паролей не рекомендуется для производственных окружений.

Чтобы увидеть созданных пользователей:

SELECT User, Host FROM mysql.user;

Ожидаемый вывод показывает всех пользователей в системе:

+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| reports_user | %         |
| hr_user      | localhost |
| intern       | localhost |
| mariadb.sys  | localhost |
| mysql        | localhost |
| root         | localhost |
+--------------+-----------+

Управление существующими пользователями

Для изменения существующих пользователей:

-- Изменить пароль пользователя
SET PASSWORD FOR 'intern'@'localhost' = PASSWORD('intern123');

-- Требовать от пользователя изменить пароль при следующем входе
ALTER USER 'hr_user'@'localhost' PASSWORD EXPIRE;

Опция PASSWORD EXPIRE заставляет пользователей изменить пароль при следующем входе - это полезно для временных паролей.

Для удаления пользователя:

-- Удалить пользователя
DROP USER 'reports_user'@'%';

После удаления пользователя убедитесь, что список пользователей обновился:

+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| hr_user     | localhost |
| intern      | localhost |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+

Назначение привилегий

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

Базовое управление привилегиями

Назначим некоторый базовый набор привилегий нашему пользователю HR:

-- Назначить привилегии SELECT и INSERT на таблицу company_db.employees
GRANT SELECT, INSERT ON company_db.employees TO 'hr_user'@'localhost';

-- Проверить назначенные привилегии
SHOW GRANTS FOR 'hr_user'@'localhost';

Команда GRANT назначает конкретные разрешения (SELECT, INSERT) на конкретные объекты базы данных пользователям. Команда SHOW GRANTS отображает текущие привилегии.

Ожидаемый вывод:

+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT SELECT, INSERT ON `company_db`.`employees` TO `hr_user`@`localhost`                                      |
+----------------------------------------------------------------------------------------------------------------+

Разные уровни привилегий

MariaDB поддерживает привилегии с разной степенью детализации:

-- Глобальные привилегии (для всех баз данных)
GRANT CREATE USER ON *.* TO 'admin'@'localhost';

-- Привилегии на уровне базы данных
GRANT ALL PRIVILEGES ON company_db.* TO 'hr_user'@'localhost';

-- Привилегии на уровне таблицы
GRANT SELECT, UPDATE ON company_db.employees TO 'intern'@'localhost';

-- Привилегии на уровне столбца
GRANT SELECT (name, department), UPDATE (department)
ON company_db.employees TO 'intern'@'localhost';

Синтаксис *.* относится ко всем базам данных и таблицам, в то время как database.* относится ко всем таблицам в конкретной базе данных. Привилегии на уровне столбцов позволяют осуществлять тонкий контроль доступа.

Отзыв привилегий

Для отзыва привилегий:

-- Отозвать конкретные привилегии
REVOKE INSERT ON company_db.employees FROM 'hr_user'@'localhost';

-- Отозвать ВСЕ привилегии
REVOKE ALL PRIVILEGES ON company_db.employees FROM 'intern'@'localhost';

Всегда проверяйте изменения привилегий после их отзыва с помощью команды SHOW GRANTS.

MariaDB [(none)]> SHOW GRANTS FOR 'hr_user'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT ALL PRIVILEGES ON `company_db`.* TO `hr_user`@`localhost`                                                |
| GRANT SELECT ON `company_db`.`employees` TO `hr_user`@`localhost`                                              |
+----------------------------------------------------------------------------------------------------------------+
MariaDB [(none)]> SHOW GRANTS FOR 'intern'@'localhost';
+---------------------------------------------------------------------------------------------------------------+
| Grants for intern@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `intern`@`localhost` IDENTIFIED BY PASSWORD '*A381F474A9DDCAA5BC97DAB83A69431B1C8D8902' |
+---------------------------------------------------------------------------------------------------------------+

Резюме

В этом практическом занятии (лабораторной работе) мы рассмотрели основные аспекты управления пользователями и привилегиями в MariaDB:

  1. Создание и управление учетными записями пользователей с различными ограничениями подключения
  2. Назначение и отзыв привилегий на различных уровнях (глобальном, уровне базы данных, уровне таблицы, уровне столбца)

Эти навыки являются фундаментальными для обеспечения безопасности вашей установки MariaDB и реализации правильного контроля доступа. Понимание управления пользователями и привилегиями является важным для поддержания безопасности базы данных и обеспечения того, чтобы пользователи имели соответствующий доступ к ресурсам базы данных.