История развития баз данных. Основные понятия и определения. Архитектура базы данных. Физическая и логическая независимость, страница 24

1)  Оно должно базироваться на базовой таблице (на одной) и включать её в первичный ключ.

2)  Оно не должно содержать полей, полученных с помощью выражений, в том числе, с помощью функций агрегирования.

3)  Оно не должно содержать DISTINCT или GROUPBY .

4)  Оно не должно использовать подзапросы (это ограничение стандарта ANSI, но некоторые системы это позволяют).

5)  Оно может основываться на представлении, но это представление само должно быть обновляемым.

6)  Для INSERT  оно должно включать все поля базовой таблицы, имеющие ограничение NOT NULL.

Через представления в базовую таблицу может быть добавлена запись, которая сама в представление не входит. Например, корректным является следующий запрос:

INSERT INTO Кафедра1 VALUES («004», «П-4», «К-2»)

Однако, добавленная таким образом запись для преподавателя К-2 не будет отображена в представлении. Такая ситуация, как правило, недопустима.

Для того, чтобы обеспечить проверку условия запроса для вновь добавляемых записей, в запросах следует указывать предложение WITHCHECKOPTION. Для нашего примера это выглядит следующим образом:

CREATE VIEW Кафедра1 AS SELECT * FROM ПреподавательWHERE pcaf = «K-1» WITH CHECK OPTION;

2. Определение правд доступа к данным.

Как уже говорилось ранее, использование SQL, в основном, имеет смысл при работе в среде Клиент-Сервер в многопользовательском режиме. Однако в таких системах возникает вопрос определения прав доступа к данным, т.е. может ли пользователь создавать таблицы, рассматривать и модифицировать чужие таблицы и т.д.

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

Пользователь, создавший таблицу, имеет все привилегии при работе с ней и может назначить привилегии другим пользователям при работе с ней.

Виды привилегий:

  1. SELECT, INSERT, UPDATE и DELETE – право использовать соответствующие команды при работе с данной таблицей.
  2. REFERENCES – право использовать таблицу в качестве родительской, определив внешний ключ в какой-то собственной таблице. Это право отличается от возможности читать таблицу по SELECT, т.к. может ограничить использование владельцем родительской таблицы (например, владелец не может удалять записи из родительской таблицы при наличии связанных записей в таблицах другого пользователя).

Кроме привилегий, определённых стандартом ANSI, в некоторых реализациях SQL используют нестандартные объектные привилегии, такие как:

  1. ALTER – право модифицировать структуру таблицы или таблиц.
  2. INDEX – право создание индексов.
  3. SYNONYM – право создания синонимов таблицы.

Назначение привилегий на доступ к собственным таблицам осуществляется по следующей команде:

GRANT список_привилегий ON объект TO список_пользователей [WITHGRANTOPTION];

Где:

Список_привилегий – список привилегий через запятую. Для привилегий UPDATE и REFERENCES после имени может быть указан в скобках список столбцов таблицы, на которую распространяется привилегии. Соответственно, пользователь получает возможность обновлять значения только этих столбцов. Для остальных привилегий столбцы указывать нельзя. Для команды INSERTи DELETEэто не имеет смысла, а право просмотра только некоторых столбцов таблицы может быть определено путём создания представления.