88
обрабатывать их строго по очереди (“вначале выполнить целиком один запрос, а
только затем другой”). В противном случае, какой-то один очень сложный запрос
может заставить ждать многих пользователей с простыми запросами. В этом аспекте
сервер баз данных аналогичен многозадачной операционной системе.
Обеспечивать идентификацию и разграничение прав доступа разных
пользователей к разным данным. В реальных информационных системах должно
существовать разграничение по правам доступа к данным. Какие-то пользователи
могут и читать и модифицировать данные, какие-то пользователи могут только
читать, а кто-то вообще может только вводить данные, а читать не имеет право (см.
Пример про резервирование билетов во Введении). Таким образом, сервер баз
данных должен, во-первых, уметь понимать команды, которые описывают такое
разграничение прав, а, во-вторых, в процессе обслуживания запросов пользователя
контролировать соблюдение этих разграничений.
Обеспечивать целостность и непротиворечивость данных в случае
аппаратных и программных сбоев. Несмотря на то, что за последнее время
надежность аппаратной части существенно выросла, абсолютно надежной техники
не бывает. В случае внезапного выключения и последующего включения
компьютера, на котором работает сервер базы данных, информация не должна быть
искажена или потеряна. Аналогично, если будет случайно выключен компьютер, на
котором работает программа-клиент, сервер базы данных должен определить этот
факт и снять те блокировки, которые данная программа-клиент установила, откатить
незавершенные транзакции и, возможно, выполнить другие действия.
Что касается программных сбоев, то здесь надо различать умышленные
попытки исказить информацию, или случайные ошибки в программах, которые
могут привести к таким же последствиям. Например, списывание денег с
банковского счета должно приводить или к зачислению этой суммы на другой счет,
или к появлению расходного документа. То есть нельзя просто так списать или
начислить деньги на счет. Злоумышленник, получивший доступ к банковской
системе, не должен иметь возможность просто так увеличить сумму на своем счете.
Кроме того, при программировании банковской системы в нее может закрасться
ошибка, которая может привести к рассогласованию данных. Поэтому сервер базы
данных должен уметь проверять корректность производимых манипуляций с
данными.
Естественно, некоторые действия могут выглядеть совершенно правильно, но
при этом таковыми не являться. Например, операционист может просто ошибиться с
вводом номера счета, и операция будет неправильной. Отследить такие ошибки
очень трудно. Однако если некоторые зависимости можно описать формально, то
будет очень полезно, если сервер базы данных будет за ними следить.
Защищать данные от несанкционированного доступа. В современных
информационных системах все данные, или, по крайней мере, их значительная
часть, является конфиденциальной. Помимо разграничения доступа для разных
категорий пользователей, сервер базы данных должен обеспечивать защиту от
попыток получить доступ к данным тем лицам, которые не являются
пользователями информационной системы.