Организация защиты данных с помощью SQL на примере СУБД MySQL. Использование привилегий в языке SQL
Привилегии в MySQL дают пользователям различные права доступа к БД. Первым делом пользователь должен пройти аутентификацию, а сервер должен решить какие привилегии полагаются пользователю.
Привилегии пользователей являются одним из основоположных критериев при защите БД.
Таблицы привилегий
Привилегии в MySQL подчиняются булевой логике: они либо выданы, либо нет. Для MySQL, привилегии храниться в специальных таблицах, которые можно, но не желательно редактировать (при наличии доступа конечно). Ниже описаны таблицы в том порядке, в котором сервер просматривает их в поисках разрешений для пользователя:
- user – в каждой строке хранятся данные об одной учетной записи пользователя, его глобальные параметры и возможно лимиты, например на количество единовременных соединений
- db – в каждой строке хранится привилегии базы данных для пользователя
- host – дополнительная таблица для ручного управления, работает совместно с таблицей db и предоставляет расширенные ограничения по доступу из указанного места при установке соединения
- tables_priv – в каждой строке хранятся привилегии одного пользователя к одной таблице
- columns_priv – в каждой строке хранятся привилегии одного пользователя к одной колонке
- procs_priv (Начиная с MySQL 5.0) – в каждой строке хранятся привилегии одного пользователя к процедуре или функции
Назначение привилегий
Для назначения новых привилегий используется команда GRAND.
Синтаксис команды GRAND достаточно прост и хорошо документирован в руководстве MySQL.
Важно понять, что в MySQL учетные записи зависят не только от логина и пароля, но так же и от хоста, поэтому может существовать одни пользователь с разными привилегиями в зависимости от его хоста.
Ниже представлены примеры назначения привилегий для различных типов пользователей:
Учетная запись системного администратора
Создадим пользователя root со всеми привилегиями
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’
-> IDENTIFIED BY ‘pass’ WITH GRANT OPTION;
Учетные записи для сотрудников
Назначим привилегии для пользователя sasha из компании «Русский порт» rusport для ввода заявок принимаемых по телефону
mysql> GRANT INSERT PRIVILEGES ON rusport.orders
-> TO ‘sasha’@’%.help.rusport.ru’
-> IDENTIFIED BY ‘pass’;
Александру необходимо пройти аутентификацию в программе, после чего добавлять или обновлять заявки клиентов, но удалять заявки ему запрещено. Таким образом, каждому сотруднику компании «Русский порт» необходимо установить свои привилегии для доступа к БД. Таким образом, транзакции выполняемые пользователем будут регистрироваться под его именем и у пользователей есть привилегии только для его нужд.
Удаление привилегий
Отзыв привилегий осуществляется SQL командой REVOKE
REVOKE [privileges] ON [objects] FROM [user];
Даже если удалить все привилегии у пользователя, он все равно сможет пройти аутентификацию, но не сможет при этом ничего больше сделать, для удаления пользователя необходимо воспользоваться командой DROP USER.
Комментарии:
Написать новый комментарий [+]