На рынке IT услуг с 1994 года
Русский порт
IT компания нового поколения

Организация защиты данных с помощью SQL на примере СУБД MySQL. Использование привилегий в языке SQL

Привилегии в MySQL дают пользователям различные права доступа к БД. Первым делом пользователь должен пройти аутентификацию, а сервер должен решить какие привилегии полагаются пользователю.

Привилегии пользователей являются одним из основоположных критериев при защите БД.

Таблицы привилегий

Привилегии в MySQL подчиняются булевой логике: они либо выданы, либо нет. Для MySQL, привилегии храниться в специальных таблицах, которые можно, но не желательно редактировать (при наличии доступа конечно). Ниже описаны таблицы в том порядке, в котором сервер просматривает их в поисках разрешений для пользователя:

  1. user – в каждой строке хранятся данные об одной учетной записи пользователя, его глобальные параметры и возможно лимиты, например на количество единовременных соединений
  2. db – в каждой строке хранится привилегии базы данных для пользователя
  3. host – дополнительная таблица для ручного управления, работает совместно с таблицей db и предоставляет расширенные ограничения по доступу из указанного места при установке соединения
  4. tables_priv – в каждой строке хранятся привилегии одного пользователя к одной таблице
  5. columns_priv – в каждой строке хранятся привилегии одного пользователя к одной колонке
  6. 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.

Узлов Александр
Посмотреть все статьи

Комментарии:

FireFly
Не хватает вам, вот полный синтаксис команды GRANT GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_...

Написать новый комментарий [+]

Имя:

E-mail:

Комментарий:


Код проверки*: