DBAtlas · Атлас эксплуатации баз данных

Модель минимальных привилегий на ролях (CREATE ROLE, DEFAULT ROLE)

MySQLБезопасность

Команда

CREATE ROLE IF NOT EXISTS 'app_read', 'app_write';
GRANT SELECT ON shop.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON shop.* TO 'app_write';

-- Application account: network range, TLS required, roles active by default
CREATE USER 'svc_app'@'10.0.%' IDENTIFIED BY 'S3cure#App2024' DEFAULT ROLE 'app_read', 'app_write' REQUIRE SSL;
CREATE USER 'ana'@'%' IDENTIFIED BY 'An4#Report2024';
GRANT 'app_read' TO 'ana'@'%';
SET DEFAULT ROLE ALL TO 'ana'@'%';

-- Show grants with roles expanded
SHOW GRANTS FOR 'svc_app'@'10.0.%' USING 'app_read', 'app_write';
SELECT FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges;

Что делает

Выдаёт привилегии ролям, а не отдельным пользователям; учётные записи получают привилегии через членство в ролях. Изменения делаются в одном месте, аудит и отзыв доступа упрощаются.

Когда использовать

При создании новых учётных записей приложений / команд и при чистке старых серверов с запутанными привилегиями.

Внимание

Роль, не являющаяся ролью по умолчанию, не активна в сессии (CURRENT_ROLE() NONE), и кажется, что у пользователя нет привилегий; используйте SET DEFAULT ROLE ALL или activate_all_roles_on_login=ON. Роль — это тоже учётная запись (заблокирована, без пароля) и видна в mysql.user. Для учётных записей приложений указывайте диапазон сети вместо '%'. Никогда не выдавайте учётной записи приложения ALL, SUPER, FILE, PROCESS или CONNECTION_ADMIN. Отзыв привилегии у роли затрагивает и активные сессии.

Открыть в DBAtlas →

Связанные материалы