ГЛАВА 35. Безопасность на уровне базы данных.

ГЛАВА 35. Безопасность на уровне базы данных.

Безопасность на уровне базы данных в Firebird решает две задачи: во-первых, не разрешить доступ пользователей, идентифицированных на сервере, к данным в вашей базе данных, и, во-вторых, предоставить доступ пользователям, которые работают с вашей базой данных. Средствами реализации такой безопасности на уровне базы данных являются привилегии SQL.

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

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

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

таблице RDB$USER_PRIVILEGES.

Безопасность и доступ по умолчанию

База данных и все ее объекты (таблицы, просмотры и хранимые процедуры) становятся защищенными от неавторизованного доступа в момент их создания. То есть доступ является "необязательным". Ни один пользователь не может получить доступ к любому объекту базы данных, не получив на это полномочий. За исключением пользователей с особыми привилегиями - владелец, SYSDBA и (в POSIX) Суперпользователь - пользователи должны иметь привилегии SQL к любой операции, даже к SELECT.

А теперь плохие новости

Существует большая загвоздка, так что не будьте так легко внушаемы ложным чувством безопасности. Несуществующие объекты не являются защищенными. Любой пользователь, имеющий доступ к базе данных, может создать любой допустимый объект базы данных - включая объявления внешних функций и таблиц, связанных с внешними таблицами - которые потенциально могут быть использованы в комбинации с установкой и выполнением хакерского кода на сервере.

С возможностью при инсталляции Firebird 1.5 ограничивать местоположение внешних объектов, к которым может обращаться сервер, ситуация несколько улучшается. При этом риски не устраняются полностью- вы должны выполнить конкретные шаги по реализации этой возможности и созданию ограничений файловой системы операционной системы. Доступ по умолчанию к внешним файлам в инсталляторе установлен в NONE, и каталоги внешних функций ограничены деревом UDF. Ваша задача - позаботиться о системных ограничениях.

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

Совет, как наказать идиотов-пользователей и плохих парней

Мой уважаемый коллега Павел Цизар (Pavel Cisar) предложил прием устранения недостатка привилегий SQL по защите метаданных Firebird, когда идиоты- пользователи, минуя DDL, пытаются изменять метаданные в системных таблицах, внося в них беспорядок. Это также отражает злонамеренные попытки разрушить ваши метаданные с помощью скрипта. Вот данное решение.

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

Все, что нужно сделать, - это просто установить управление доступом к системным таблицам путем выполнения серии операторов GRANT ALL <системная таблица> то PUBLIC. После этого мы можем отменить любые права.

Я не знаю точного технического объяснения, каким именно образом это работает, но это мой совет. Оператор GRANT создает управляющий список доступа (Access Control List, ACL) для системной таблицы, который проверяется в коде. Какая-то ветвь в этом коде означает "предоставить всем все привилегии, если элемент ACL не найден для системной таблицы, иначе использовать ACL".

Следует помнить некоторые вещи.

• Эта установка не сохраняется после восстановления базы данных из резервной копии, следовательно, напишите скрипт, который вы будете использовать каждый раз для только что восстановленной базы данных.

• Вам нужно быть внимательным по поводу удаления прав SELECT у PUBLIC К некоторым системным таблицам, потому что функции API isc_biob_iookup_desc() и isc_array_iookup_bounds() зависят от этой возможности. От этого также могут зависеть некоторые инструментальные средства и библиотеки.

• Удаление прав записи в системные таблицы не ограничивает возможность их изменения обычным нормальным способом с использованием команд DDL. Предотвращается только бесполезная прямая корректировка системных таблиц.

Привилегия дает возможность пользователю иметь некий вид доступа к объекту в базе данных. Она предоставляется с помощью оператора GRANT и убирается с использованием оператора REVOKE.

Синтаксис разрешения доступа:

GRANT <привилегия> ON <объект>

ТО <пользователь>;

привилегия, предоставленная пользователю к объекту, создает разрешение. Синтаксис для удаления разрешений:

REVOKE <привилегия> ON <объект>

FROM <пользователь>;

Доступны некоторые варианты "центрального" синтаксиса. Мы рассмотрим их несколько позже.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

4.27 Замечания об уровне связи данных

Из книги автора

4.27 Замечания об уровне связи данных Доля датаграмм, управляющих информацией, оказывает влияние на общую производительность. Разумеется, когда нужно переслать в сети большой объем данных, лучше заполнять датаграммы как можно плотнее.Для разных типов сетей максимальные


Перемещение данных из базы данных Access 2007 на узел SharePoint

Из книги автора

Перемещение данных из базы данных Access 2007 на узел SharePoint Потребности многих приложений Access 2007 превышают простую потребность в управлении и сборе данных. Часто такие приложения используются многими пользователями организации, а значит, имеют повышенные потребности в


Глава 13. Базы данных

Из книги автора

Глава 13. Базы данных Модуль QtSql средств разработки Qt обеспечивает независимый от платформы и типа базы данных интерфейс для доступа с помощью языка SQL к базам данных. Этот интерфейс поддерживается набором классов, использующих архитектуру Qt модель/представление для


Проверка введенных данных на уровне процессора баз данных

Из книги автора

Проверка введенных данных на уровне процессора баз данных Помимо проверки данных во время ввода информации, следует знать о том, что можно также выполнять проверку и на уровне процессора баз данных. Такая проверка обычно более надежна, поскольку применяется независимо


ГЛАВА 8 Работа с проектом базы данных среде Visual Studio .NET

Из книги автора

ГЛАВА 8 Работа с проектом базы данных среде Visual Studio .NET Проект базы данных — это особый тип проекта Visual Studio .NET, предназначенный для создания и управления SQL-сценариями баз данных.Чтобы разработка приложений для работы с базами данных была проще и удобнее, в последнюю


Конфигурация на уровне базы данных

Из книги автора

Конфигурация на уровне базы данных Эта глава посвящена конфигурации на уровне сервера. Один сервер Firebird может работать с несколькими базами данных одновременно. Каждая база данных может быть сконфигурирована таким образом, чтобы соответствовать предъявляемым к ней


Безопасность базы данных

Из книги автора

Безопасность базы данных Все пользователи, за исключением тех, кто имеет полные привилегии, должны получить права к каждому объекту, к которому они должны иметь доступ. SQL-оператор GRANT используется для назначения привилегий.Firebird поддерживает роли SQL. Вначале роль должна


ГЛАВА 14. Чертежная доска для базы данных.

Из книги автора

ГЛАВА 14. Чертежная доска для базы данных. Конечно же, база данных хранит данные. Однако данные сами по себе не могут использоваться, если они не были сохранены в соответствии с некоторыми правилами, которые, во-первых, определяют их смысл и значение и, во-вторых, позволяют


ГЛАВА 15. Создание и ведение базы данных.

Из книги автора

ГЛАВА 15. Создание и ведение базы данных. База данных Firebird - это, прежде всего, файл файловой системы, находящийся под управлением подсистемы ввода/вывода главной машины, на которой выполняется сервер Firebird. Как только сервер создаст этот файл, его система управления


Установка размера кэша на уровне базы данных

Из книги автора

Установка размера кэша на уровне базы данных Существует несколько способов конфигурирования размера кэша для конкретной базы данных. Изменения не действуют до тех пор, пока не будет установлено новое соединение с Суперсервером Firebird или не будет соединен новый клиент с


Глава 3 Создание таблиц новой базы данных

Из книги автора

Глава 3 Создание таблиц новой базы данных Как уже было сказано в главе 2, разработка новой базы данных «Контрольно-измерительные приборы» производится в программной среде Access 2002.Формирование БД в Access состоит из ряда последовательных этапов, описываемых ниже. Первый этап


Глава 4 Создание форм новой базы данных

Из книги автора

Глава 4 Создание форм новой базы данных Если таблицы служат первичными, исходными элементами базы данных, то «на выходе» вы получаете формы и отчеты. Как правило, формы используются для получения ответов на запросы пользователя, записи данных в таблицы и/или изменения


Глава 5 Создание отчетов новой базы данных

Из книги автора

Глава 5 Создание отчетов новой базы данных В Access 2002 отчет создается почти так же, как форма. Разница между этими двумя объектами базы данных состоит не в технологии их построения, а в их целевом назначении. Если с формой пользователь будет работать на экране, то отчет


Глава 12 Базы данных

Из книги автора

Глава 12 Базы данных 12.1. Понятие о базах данных Одной из важнейших областей применения компьютеров является переработка и хранение больших объемов информации в различных сферах деятельности человека: в экономике, банковском деле, торговле, транспорте, медицине, науке и