Как уже говорилось ранее, использование SQL, в основном, имеет смысл при работе в среде Клиент-Сервер в многопользовательском режиме. Однако в таких системах возникает вопрос определения прав доступа к данным, т.е. может ли пользователь создавать таблицы, рассматривать и модифицировать чужие таблицы и т.д.
Каждый пользователь в базе данных SQL имеет множество привилегий. Привилегия – это право выполнить определённую операцию. Минимальная привилегия – это вход в систему, в процессе которого проверяется идентификатор и пароль пользователя. Привилегии делятся на объектные и системные. Сначала рассмотрим объектные привилегии, которые определены стандартом ANSI. Системные привилегии стандартом не определены, но применяются практически во всех системах, использующих SQL. Объектные привилегии определяют прав пользователя выполнять определённые команды для определённых объектов базы данных (таблиц, представлений). Т.е. пользователь может иметь различные права при работе с различными таблицами или даже со столбцами таблиц.
Пользователь, создавший таблицу, имеет все привилегии при работе с ней и может назначить привилегии другим пользователям при работе с ней.
Виды привилегий:
- SELECT, INSERT, UPDATE и DELETE – право использовать соответствующие команды при работе с данной таблицей.
- REFERENCES – право использовать таблицу в качестве родительской, определив внешний ключ в какой-то собственной таблице. Это право отличается от возможности читать таблицу по SELECT, т.к. может ограничить использование владельцем родительской таблицы (например, владелец не может удалять записи из родительской таблицы при наличии связанных записей в таблицах другого пользователя).
|
Кроме привилегий, определённых стандартом ANSI, в некоторых реализациях SQL используют нестандартные объектные привилегии, такие как:
- ALTER – право модифицировать структуру таблицы или таблиц.
- INDEX – право создание индексов.
- SYNONYM – право создания синонимов таблицы.
Назначение привилегий на доступ к собственным таблицам осуществляется по следующей команде:
GRANT список_привилегий ON объект TO список_пользователей [WITH GRANT OPTION];
Где:
Список_привилегий – список привилегий через запятую. Для привилегий UPDATE и REFERENCES после имени может быть указан в скобках список столбцов таблицы, на которую распространяется привилегии. Соответственно, пользователь получает возможность обновлять значения только этих столбцов. Для остальных привилегий столбцы указывать нельзя. Для команды INSERT и DELETE это не имеет смысла, а право просмотра только некоторых столбцов таблицы может быть определено путём создания представления.
Объект – имя таблицы или представления. Стандарт ANSI не предусматривает, но некоторые реализации SQL позволяют указывать здесь список таблиц или представлений.
Список_пользователей – список пользователей, имя которым назначаются привелегии запятую. Здесь указываются идентификаторы, которые назначаются пользователем. Каждый пользователь может иметь собственный идентификатор или несколько пользователей имеют один идентификатор.
WITH GRANT OPTION – пользователь получает право назначать привилегии другим пользователям.
Пользователь, получивший право доступа к таблице другого пользователя, должен в своих запросах обозначать её как идентификатор_владельца.имя_таблицы.
|
Пример:
Пусть пользователь Иванов использует следующую команду:
GRANT SELECT, UPDATE ON план_работы TO Петров WITH GRANT OPTION;
Теперь для просмотра таблицы Петров должен использовать следующий запрос:
SELECT * FROM Иванов.план_работы
Далее, Петров может назначить полномочия другим членам группы:
GRANT SELECT ON Иванов.план_работы TO Сидоров;
Эта команда не меняет владельца таблицы и Сидоров для просмотра таблицы должен использовать эту же команду.
Пользователь может быть лишён права назначать привилегии с помощью команды:
REVOKE список_привилегий ON объект
FROM список_пользователей
При этом, возникает вопрос, кто может лишать привилегий. И если пользователь лишился привилегий, то лишаются привилегий и пользователи, получившие их от него. Во всех системах, как правило, применяется каскадный приём, т.е. если пользователь лишился привилегий, то другие пользователи, получившие привилегии от него, также лишаются этих привилегий.
Перейдём к системным привилегиям. Во всех системах существуют права пользователей, не привязанные к определённым объектам базы данных. Например, стандарт ANSI не ограничивает право создавать таблицы. Но, это область привилегий нельзя оставлять без внимания.
Привилегии, которые не определяются в терминах отдельных объектов, называются системными привилегиями или авторским правом на базу данных. Эти привилегии не стандартизированы и существуют различные подходы к их применению.
Обычно различают следующие виды системных привилегий:
- CONNECT – право входа в систему и право создания представлений и синонимов.
- RESOURCE – право создавать базовые таблицы.
- DBA – привилегия «суперпользователя» (администратора).
Назначение и лишение привилегий осуществляется по команде GRANT или REVOKE.
Пример 1:
Регистрация пользователя в системе.
GRANT CINNECT TO Федоров
PASSWORD пароль_1;
Пример 2:
Удаление пользователя из системы.
REVOKE CINNECT FROM Федоров;
При этом, следует предварительно удалить все объекты, которые он создавал.
Тема 11.
1. Определение синонимов объектов. Понятие транзакции. Управление параллелизмом