Защита баз данных: разделение доступа

Многие администраторы сайтов допускают опасную ошибку, влекущую как похищение информации, так и ее уничтожение. Назначая единые права доступа для всех скриптов сайта, таким образом, мы потенциально позволяем злоумышленнику получить полный доступ от имени любого скрипта. Имея в виду, что чем большее число скриптов находятся на сервере, тем больше вероятность взлома, такой неправильный подход в распределении прав может сказаться весьма печально на работе сервера.
Обычно сайт состоит из нескольких логических частей, самая простая схема такова:
система администрирования (управления) сайтом;
система отображения контента.
На сайте может быть достаточно много различных модулей с разными принципами работы, например, голосования, форум, гостевая книга, система аутентификации, чат, информеры и т.д. Все они требуют зачастую совершенно различных прав при работе с базой данных.
Например, управление предусматривает не только выборку информации из базы, как модуль отображения, но и внесение и изменение. Для современных форумов список возможностей еще больше, это и уничтожение таблиц, и изменение их свойств, и пакетный импорт данных. Для системы голосований на сайтах потребуется обновление полей или внесение данных в базы. Таким образом, разные модули мы можем наделить разными "полномочиями", а вернее - правами.
Идеальным вариантом было бы создание отельных учетных записей для разных модулей с обечпечения доступа к конкретным базам и таблицам в них. Однако может оказаться достаточным и использование однотипных учетных записей. В простейшем случае можно создать две учетные записи: для отображения информации и для ее занесения: site_use и site_admin.
Создадим эти записи в БД MySQL:
GRANT SELECT ON site.* TO site_use@localhost IDENTIFIED BY "password1";
GRANT SELECT, INSERT, UPDATE, DELETE ON site.* TO site_admin@localhost IDENTIFIED BY "password2";
FLUSH PRIVILEGES;
Таким образом, учетная запись site_use (пароль password1) получила возможность выборки данных (SELECT) из всех (*) таблиц базы данных site. Вторая учетная запись site_admin позволяет так же добавлять, обновлять и удалять данные. Последняя команда сбрасывает буферы прав, чтобы изменения вступили в силу немедленно.
Теперь, если скрипт отображения сайта окажется уязвим и злоумышленник получит возможность от имени учетной записи отображения site_use выполнять команды MySQL, он не сможет совершить ничего существенного. Его действия будут ограничены лишь отображением содержимого базы данных site. Другие учетные записи, хранящиеся в базе mysql, ему недоступны. Недоступно так же изменение информации на сайте.