Московский государственный университет имени М.В.Ломоносова
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 8464 / 634 | Оценка: 3.85 / 3.50 | Длительность: 22:03:00
Лекция 8:

Средства языка SQL для обеспечения авторизации доступа к данным, управления транзакциями, сессиями и подключениями

Аннотация: В этой лекции обсуждаются основные средства SQL:1999, предназначенные для регулирования работы с базами данных. Сначала рассматривается механизм авторизации доступа к объектам SQL-ориентированной базы данных, основанный на понятиях идентификатора пользователя, имени роли и привилегии доступа. Затем описываются особенности SQL-транзакций и основные языковые средства, воздействующие на поведение транзакций. Наконец, обсуждаются зафиксированные в стандарте SQL средства управления подключением к серверу баз данных.
Ключевые слова: администратор баз данных, пользователь, SQL, базы данных, представление, управление транзакциями, авторизация доступа к данным, мандатный (mandatory) способ защиты данных, дискреционный (discretionary) способ защиты данных, операции, ACID-транзакция, атомарность (Atomicy), consistent, изоляция (Isolation), долговечность (Durability), механизмы, основной раздел, реализация языка, СУБД, доступ, приложение, база данных, контроль доступа, объект базы данных, интернационализация, локализация, collate, translation, D-триггер, сокрытие информации, схема базы данных, PRO, диагностическое сообщение, таблица, привилегия доступа, usage, triggering, структурный тип, идентификатор авторизации (authorization identifier, authID), стандарт SQL:1999, идентификатор пользователя, функция, функция CURRENT USER, имя пользователя, роль, очередь, идентификатор псевдопользователя PUBLIC, владелец объекта базы данных, имя роли, передача привилегий, привилегия уровня DBA (DataBase Administrator), DDL, data definition language, ALTER, DROP, стандарт языка, мандат, SQL-сессия, чтение данных, сеанс работы, идентификатор пользователя SQL-сессии, имя роли SQL-сессии, оператор CONNECT, оператор SET SESSION AUTHORIZATION, текущий идентификатор пользователя SQL-сессии, функция SESSION_USER, текущее имя роли SQL-сессии, функция CURRENT_ROLE, неопределенное значение, динамический SQL, оператор CREATE ROLE, раздел WITH ADMIN, оператор DROP ROLE, оператор GRANT, передача ролей, трансляция, раздел WITH GRANT OPTION, раздел GRANTED BY, аннулирование привилегий, оператор REVOKE, правило определения привилегий над представлениями, базовые таблицы, тип символьной строки, оператор SET ROLE, privileges, режимы RESTRICT и CASCADE, раздел GRANT OPTION FOR, определение столбца, аннулирование ролей, согласованность (Consistency), atomicy, ограничение целостности, целостное состояние, isolation, concurrent, durability, оператор START TRANSACTION, CREATE TABLE, оператор COMMIT, оператор ROLLBACK (ROLLBACK WORK), уровень изоляции (isolation level), режим доступа (access mode), размер области диагностики, оператор SET TRANSACTION, активная транзакция, diagnostics, исключительная ситуация, уровень изоляции, уровень изоляции SERIALIZABLE, феномен "грязного" чтения (dirty read), уровень изоляции READ UNCOMMITTED, феномен неповторяемого чтения (unrepeatable read), первичный ключ, неповторяемое чтение, уровень изоляции READ COMMITTED, феномен фантомов, уровень изоляции REPEATABLE READ, аннулирование, ROLLBACK WORK, фиксация транзакции, Операция фиксации, сервер баз данных, журнализация, раздел AND [ NO ] CHAIN, &-параллелизм, deferrable, defer, оператор SET CONSTRAINTS, constraint, операция ROLLBACK TO SAVEPOINT, здравый смысл, abort, transaction, Rollback, chaining, оператор SAVEPOINT, оператор RELEASE, операции с данными, клиент-сервер, принципиальная схема, конечный пользователь, монитор, компонент, сетевой протокол, программный компонент, системная переменная, установление соединений, операторы SQL, выполняемый оператор, оператор SET CONNECTION, системный ресурс, оператор DISCONNECT, символьная строка, граф, объект

Введение

В этой лекции мы обсудим средства языка, которые касаются скорее администраторов баз данных, нежели конечных пользователей или программистов приложений. Но надо сказать, что любой квалифицированный пользователь SQL-ориентированной базы данных должен иметь представление об административных средствах SQL (тем более что средства управления транзакциями во многом затрагивают и его интересы).

Данная лекция включает материал, в меньшей степени концептуально связанный, чем это было в предыдущих лекциях курса, посвященных языку SQL. В первом из основных разделов лекции мы обсудим базовые идеи авторизации доступа к данным, заложенные в основу языка SQL. Метод авторизации доступа, используемый в SQL, относится к мандатным (mandatory) видам защиты данных. При этом подходе с каждым зарегистрированным в системе пользователем ( субъектом ) и каждым защищаемым объектом системы связывается мандат, определяющий действия, которые может выполнять данный субъект над данным объектом. В отличие от такого подхода, при применении дискреционного (discretionary) метода ограничения доступа с каждым из объектов системы связывается одна или несколько категорий пользователей, каждой из которых позволяются или запрещаются некоторые действия над объектом.

Следующий раздел посвящен фундаментальному в области баз данных (и не только) понятию транзакции - последовательности операций над базой данных (в общем случае включающей операции обновления базы данных), которая воспринимается системой как одна неделимая операция. При классическом подходе к управлению транзакциями следуют принципу ACID ( Atomicy, Consistency, Isolation, Durability ). Этому принципу следовали и разработчики языка SQL. Однако понятие транзакции выходит далеко за пределы SQL; механизмы управления транзакциями составляют отдельную и большую исследовательскую область. В данной лекции мы не будем углубляться в технические детали управления транзакциями и ограничимся возможностями, заложенными в язык SQL.

Наконец, в последнем основном разделе лекции мы обсудим средства языка SQL, предназначенные для управления сессиями и подключениями пользовательских приложений. Подавляющее большинство реализаций языка SQL основывается на архитектурной модели клиент-сервер. Приложения обычно выполняются на клиентской аппаратуре, отделенной (по крайней мере, логически) от серверной аппаратуры, на которой работает собственно СУБД. Чтобы получить доступ к базе данных, приложение должно подключиться к серверу и образовать сессию в этом подключении. У приложения может одновременно существовать несколько подключений к разным серверам баз данных, но не более одной сессии в каждом подключении.

Поддержка авторизации доступа к данным в языке SQL

В общем случае база данных является слишком дорогостоящим предметом, чтобы можно было использовать ее в автономном режиме. Обычно с достаточно большой базой данных (параллельно или последовательно) работает много приложений и пользователей, и не для всех них было бы разумно обеспечивать равноправный доступ к хранящимся данным.

В языке SQL (SQL:1999) предусмотрены возможности контроля доступа к разным объектам базы данных, в том числе к следующим объектам:

  • таблицам;
  • столбцам таблиц;
  • представлениям;
  • доменам;
  • наборам символов1Напомним, что в этом курсе мы не касаемся вопросов интернационализации и локализации языка SQL. ;
  • порядкам сортировки символов (collation);
  • преобразованиям (translation);
  • триггерам;
  • подпрограммам, вызываемым из SQL;
  • определенным пользователями типам.

В совокупности в SQL:1999 может поддерживаться девять видов защиты разных объектов в соответствии со следующими возможными действиями (см. табл.18.1).

При разработке средств контроля доступа к объектам баз данных создатели SQL придерживались принципа сокрытия информации об объектах, содержащихся в схеме базы данных, от пользователей, которые лишены доступа к этим объектам. Другими словами, если некоторый пользователь не обладает, например, привилегией на просмотр таблицы PRO, то при выполнении операции SELECT * FROM PRO он получит такое же диагностическое сообщение, как если бы таблица PRO не существовала. Если бы в случае отсутствия этой таблицы и в случае отсутствия привилегии доступа выдавались разные диагностические сообщения, то непривилегированный пользователь получил бы данные о том, что интересующая его таблица существует, но он лишен доступа к ней.

Таблица 18.1.
Вид защиты и соответствующее действие Название привилегии Применимо к следующим объектам
Просмотр SELECT Таблицы, столбцы, подпрограммы, вызываемые из SQL
Вставка INSERT Таблицы, столбцы
Модификация UPDATE Таблицы, столбцы
Удаление DELETE Таблицы
Ссылка REFERENCES Таблицы, столбцы
Использование USAGE Домены, определенные пользователями типы, наборы символов, порядки сортировки символов, преобразования
Инициирование TRIGGER Таблицы
Выполнение EXECUTE Подпрограммы, вызываемые из SQL
Подтипизация UNDER Структурные типы

В лекции 12 мы бегло упоминали, что в SQL-ориентированной системе каждому зарегистрированному в системе пользователю соответствует его уникальный идентификатор (в стандарте используется термин идентификатор авторизации, authorization identifier - authID ). Как мы отмечали, в стандарте SQL:1999 не зафиксированы точные правила представления идентификатора пользователя, хотя обычно в реализациях SQL ниладическая функция CURRENT USER выдает текстовую строку, содержащую регистрационное имя пользователя, как оно сохраняется в файлах соответствующей операционной системы (ОС). Привилегии доступа к объектам базы данных могут предоставляться пользователям, представляемым своими идентификаторами, а также ролям2Как будет показано в следующем подразделе, термин роль в языке SQL полностью соответствует своему житейскому смыслу. И в мире баз данных люди большей частью играют чью-то роль, а не представляют себя лично. (см. следующий подраздел), выполнение которых, в свою очередь, может предоставляться пользователям. Кроме того, в SQL поддерживается концепция псевдоидентификатора (или идентификатора псевдо) пользователя PUBLIC, который соответствует любому приложению или пользователю, зарегистрированному в системе баз данных. "Пользователю" PUBLIC могут предоставляться привилегии доступа к объектам базы данных, как и любому другому пользователю.

В модели контроля доступа SQL создатель любого объекта базы данных автоматически становится владельцем этого объекта. При этом владелец объекта может идентифицироваться либо своим идентификатором пользователя, либо именем своей роли. Вообще говоря, владелец объекта обладает полным набором привилегий для выполнения действий над объектом (с одним исключением, которое мы обсудим в данном разделе позже). Владелец объекта, помимо прочего, обладает привилегией на передачу всех (или части) своих привилегий другим пользователям или ролям. В частности, владелец объекта может передать другим пользователям или ролям привилегию на передачу привилегий последующим пользователям или ролям (эти действия с передачей привилегии на передачу привилегий могут продолжаться рекурсивно).

Во многих реализациях поддерживаются привилегии уровня DBA (DataBase Administrator) для возможности выполнения операций DDL - Data Definition Language ( CREATE, ALTER и DROP над объектами, входящими в схему базы данных). В стандарте SQL требуется лишь соблюдение следующих правил.

  • Любые пользователь или его роль могут выполнять любые операции DDL внутри схемы, которой владеют3В соответствии со стандартом любые зарегистрированные в системе пользователь или роль автоматически являются владельцами части схемы базы данных, имена объектов которой начинаются с соответствующего идентификатора, за которым следует символ <.>..
  • Не допускается выполнение каких-либо операций DDL внутри схемы, которой не владеет пользователь или роль, пытающиеся выполнить соответствующую операцию.
  • Эти правила не допускают исключений.
Алексей Ковтун
Алексей Ковтун

При попытке исполнения запроса:

CREATE DOMAIN EMP_NO AS INTEGER

    CHECK (VALUE BETWEEN 1 AND 10000);

Выдается ошибка: Неизвестный тип объекта "DOMAIN" в интсрукции CREATE, DROP или ALTER. 

Используется SQL Server MS SQL 2008R2

Александра Каева
Александра Каева