Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
Хранимые процедуры
Язык процедур Firebird (PSQL) реализует расширения его языка SQL, предоставляя логику условий, структуры управления потоками выполнения, обработку исключений (как встроенных, так и определенных пользователем), локальные переменные, механизм событий и возможность получать входные аргументы почти всех типов данных, существующих в Firebird. Он реализует мощную структуру управления потоком для обработки курсоров, что позволяет помещать наборы данных напрямую в память клиента без необходимости создания временных таблиц. Такие процедуры вызываются клиентом оператором SELECT; разработчикам они известны
Хранимые процедуры могут включать другие хранимые процедуры и могут быть рекурсивными. Все выполнение хранимой процедуры, включая выбор набора данных из процедур и внутренние вызовы других процедур, находится под управлением одной транзакции, которая вызвала процедуру. Соответственно, вся работа, выполненная при вызове хранимой процедуры, может быть отменена при откате клиентом этой транзакции.
Триггеры
Триггеры являются особыми процедурами, созданными для определенных таблиц с целью автоматического выполнения в процессе завершения добавлений, изменений или удалений на сервере. Любая таблица может иметь произвольное количество триггеров, которые будут выполняться до или после добавлений, изменений или удалений. Порядок выполнения определяется параметром позиции в объявлении триггера. Триггеры имеют некоторые расширения языка, недоступные для хранимых процедур или в динамическом SQL. Например, контекстные переменные OLD и NEW, при использовании которых в качестве префикса к имени столбца можно получить доступ к существующему (старому, old) и требуемому (новому, new) значению столбца. Триггеры могут вызывать хранимые процедуры, но не другие триггеры.
Работа, выполненная триггерами, будет отменена, если транзакция, явившаяся причиной вызова триггера, будет отменена.
Функции, определенные пользователем
Для сохранения своего малого объема Firebird поставляется с весьма скромным арсеналом встроенных (родных) функций трансформации данных. Пользователи могут писать свои собственные функции на известном им языке, таком как C/C++, Pascal или Object Pascal, для получения аргументов и возвращения единственного результата. Как только внешняя функция (UDF) будет определена в базе данных, она тут же станет доступной как допустимая функция SQL для приложений, хранимых процедур и триггеров.
Firebird поставляет две готовые к использованию библиотеки UDF: ib udf, доступную как для Windows, так и для Linux, и fbudf, доступную в настоящий момент для Windows и Linux в версии 1.5 и доступную только для Windows в версии 1.0.x. Firebird отыскивает UDF в библиотеках, находящихся в каталоге /udf каталога инсталляции или в других каталогах, указанных в параметре udfAccess (версия 1.5) или externai_function_directory (версия 1.0.x) в файле конфигурации Firebird.
Приложения, работающие с несколькими базами данных
В отличие от многих реляционных баз данных приложения Firebird могут быть одновременно соединены более чем с одной базой данных. Клиент Firebird может открывать и иметь доступ к любому количеству баз данных в одно и то же время. Таблицы из разных баз данных не могут быть объединены для получения связанного набора данных, но для комбинирования информации могут использоваться курсоры.
Если требуется согласованность между базами данных, Firebird может управлять выходными наборами данных, выполняя
Безопасность сервера
Для управления доступом пользователей к серверу Firebird использует базу данных безопасности security.fdb (isc4.gdb в версии 1.0.x). Во время инсталляции эта база данных содержит одного пользователя - SYSDBA.
* В инсталляции Windows пароль пользователя SYSDBA masterkey. Настоятельно рекомендуется немедленно после инсталляции запустить программу gsec.exe (в каталоге инсталляции, подкаталоге /bin) и изменить этот пароль. Это один из наиболее известных паролей в мире баз данных!
* Инсталляторы RPM версии 1.5 для Linux генерируют случайный пароль для SYSDBA и заменяют в базе данных старый пароль masterkey. Этот пароль сохраняется в корневом каталоге инсталляции в текстовом файле с именем firebird.PASSWORD. Если вы собираетесь использовать данный пароль, то удалите этот файл.
Пользователь SYSDBA имеет полные привилегии ко всем базам данных на сервере; в текущей модели безопасности он не может быть изменен. Пользователь root в Linux/UNIX получает привилегии SYSDBA автоматически. Владелец базы данных (пользователь, создавший базу данных) имеет полные права на эту базу данных. Для всех других пользователей доступ к объектам базы данных возможен только через предоставление им привилегий SQL.
Безопасность базы данных
Все пользователи, за исключением тех, кто имеет полные привилегии, должны получить права к каждому объекту, к которому они должны иметь доступ. SQL-оператор GRANT используется для назначения привилегий.
Firebird поддерживает роли SQL. Вначале роль должна быть создана с использованием оператора CREATE ROLE и подтверждена (commit). Группа привилегий может быть назначена роли, а затем роль может быть назначена пользователю. Для использования этих привилегий пользователь должен при соединении с базой данных указывать и имя пользователя, и имя роли.
Более подробную информацию о безопасности баз данных см. в главе 35.
В главе 7 мы более внимательно рассмотрим клиентскую сторону в архитектуре клиент-сервер Firebird: библиотеку функций, которая предоставляет приложениям такие уровни системы, как средства связи и язык SQL. Если вам нужна помощь в инсталляции удаленного клиента, перейдите к последнему разделу этой главы.
ГЛАВА 7. Клиенты Firebird.
Клиенту на удаленной рабочей станции требуется клиентская библиотека и приложение (программа), которое может взаимодействовать с интерфейсом прикладного программирования (Application Programming Interface, API), объявленным в этой библиотеке.
Клиентская библиотека предоставляет протокол соединения и транспортный уровень, которые ваше клиентское приложение использует для связи с сервером. Стандартная библиотека для клиентов Windows - это Windows DLL. Для клиентов POSIX это совместно используемый объект (библиотека SO). Размер стандартной клиентской библиотеки приблизительно 350 Кбайт.