Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
Триггеры
Триггеры являются особыми процедурами, созданными для определенных таблиц с целью автоматического выполнения в процессе завершения добавлений, изменений или удалений на сервере. Любая таблица может иметь произвольное количество триггеров, которые будут выполняться до или после добавлений, изменений или удалений. Порядок выполнения определяется параметром позиции в объявлении триггера. Триггеры имеют некоторые расширения языка, недоступные для хранимых процедур или в динамическом 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 обеспечивает автоматическое двухфазное подтверждение транзакции (2РС) при изменениях в данных, чтобы гарантировать, что изменения не будут применены в одной базе данных, если изменения в другой базе данных в контексте той же транзакции были отменены или потеряны из-за ошибок в сети.
Безопасность сервера
Для управления доступом пользователей к серверу 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 Кбайт.
Некоторые уровни доступа, как, например провайдер Firebird .NET и драйверы JayBird Java, не требуют наличия клиентской библиотеки и напрямую реализуют сетевой протокол. Еще один режим существует во встраиваемом сервере - библиотека, которая объединяет клиентский и серверный экземпляры для использования одним пользователем.
Клиентская рабочая станция также может иметь копию текущего файла firebird.msg или его локализованную версию для того, чтобы отображались корректные сообщения сервера.
Обычно вы будете инсталлировать копию клиентской библиотеки на сервере для использования с некоторыми утилитами командной строки Firebird и/или для различных программ управления, выполняющихся на сервере, которые вы могли бы использовать. Тем не менее многие из этих утилит могут запускаться удаленно. Администратор системы может управлять некоторыми из основных сервисов, предоставляемыми этими утилитами для доступа к ним, через интерфейс управления услугами на хосте.
Что такое клиент Firebird?
Клиент Firebird - это приложение, обычно написанное на языке высокого уровня, которое предоставляет конечному пользователю доступ к средствам и инструментам системы управления базами данных Firebird и к данным, хранимым в базах данных. Интерактивная утилита isql и другие утилиты командной строки в вашем каталоге Firebird /bin являются примерами клиентских приложений.
Клиенты Firebird обычно располагаются на удаленных рабочих станциях и через сеть соединяются с сервером Firebird, выполняющимся на хост-машине. Firebird также поддерживает автономную модель, позволяющую клиентским приложениям, клиентской библиотеке Firebird и серверу Firebird выполняться на одном физическом устройстве.
Клиентские приложения могут и вовсе не взаимодействовать с конечными пользователями. Клиентами могут быть демоны, скрипты и сервисы.
Firebird был спроектирован для неоднородных сетей. Клиенты, выполняющиеся в одной операционной системе, могут иметь доступ к серверу на другой платформе операционной системы. Общий случай- наличие рабочих станций под Windows (98 или ME) и Linux, одновременно имеющих доступ к корпоративному серверу, выполняющемуся под Windows NT или Windows 2000, либо под какой-нибудь разновидностью UNIX или Linux.
В модели клиент-сервер приложения никогда не обращаются к базе данных напрямую. Любой процесс приложения общается с сервером через клиентскую библиотеку Firebird, копия которой должна быть инсталлирована на каждой клиентской рабочей станции. Клиентская библиотека Firebird предоставляет API, через который программы выполняют обращения к функциям для поиска, сохранения и манипулирования данными и метаданными. Обычно другие уровни также вовлечены в этот интерфейс между программой приложения и клиентом Firebird, который использует обычные или специфичные для языка приложения механизмы для заполнения базы данных или вызова функций API.
Для разработок Java постоянно поддерживаемые в Firebird драйверы включают JayBird JDBC/JCA-совместимый драйвер Java для гибкого, независимого от платформы интерфейса приложения между множеством открытых и коммерческих систем разработки Java и базами данных Firebird. Открытые и сторонние интерфейсные компоненты и драйверы доступны для множества других платформ разработки, включая Borland Delphi, Kylix и C++ Builder, коммерческие и открытые варианты C++, Python, PHP и DBI::Perl. Для приложений .NET провайдер Firebird .NET постоянно совершенствуется. Контактные адреса и другую информацию см. в приложении 3.