Контроль доступа в процессе обработки запроса

Обработка SQL-запроса состоит из нескольких этапов:

  1. трансляция запроса и привязка его элементов к физическим объектам БД;

  2. выполнение запроса;

  3. передача результата выполнения запроса пользователю.

Проверка прав доступа выполняется на каждом этапе.

На первом этапе проверяется, в основном, логическая защита на самом высоком (общем) уровне.

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

В СУБД ЛИНТЕР права доступа проверяются только в момент привлечения очередного объекта к процессу обработки запроса. Таким образом, СУБД может потратить довольно продолжительное время на обработку запроса, пока не определит, что она невозможна.

С другой стороны, если в процессе обработки запроса кто-то изменяет права субъекта, то данные изменения могут сказаться уже на обработке текущего запроса. По крайней мере, при таком подходе возрастает вероятность того, что СУБД примет во внимание изменение прав доступа.

Важность того, что проверка доступа перенесена в этап обработки, обусловлена освобождением первых двух этапов от дополнительных проверок. Это позволяет прикладным программам свободно использовать уже оттранслированные и привязанные запросы.