Назначение привилегий
Теперь мы научимся назначать различные типы привилегий, чтобы контролировать, что могут делать пользователи.
Базовое управление привилегиями
Назначим некоторый базовый набор привилегий нашему пользователю 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' |
+---------------------------------------------------------------------------------------------------------------+