Oracle Data Base является не просто хранилищем информации, а мощнейшим сервером хранения, обработки и доставки данных. В некоторых случаях можно предложить несколько необычные, но весьма эффективные варианты пользования.
Предположим, у нас есть мощный сервер Oracle, на котором мы храним и обрабатываем ценные данные. Наш клиент хотел бы получать наши данные, но при этом желает строить свою информационную систему, включая средства публикации информации для своих конечных пользователей, скажем, на PHP. Кроме того, он хотел бы получать данные от нашего сервера, например, в формате JSON или XML. Остановимся для определенности на втором варианте.
Какие у нас перспективы? Дать клиенту прямой доступ в нашу базу? Это по ряду причин не очень хорошо. Во-первых, он увидит много лишнего. Во-вторых, у него будет потенциальная возможность что-то повредить. В-третьих, ему придется нести ответственность за доступ к избыточным ресурсам, а нам - плохо спать по ночам.
Необходим посредник, который точно отмерит нашему клиенту необходимую и достаточную меру его прав и ответственности по отношению к нашим данным.
Традиционным решением являются Web сервисы. Агент клиента связывается с нашим агентом, представляется ему и заказывает некий анонсированный сервис, например, забрать такие-то данные. Все выглядит неплохо, но поддержание Web сервисов в работоспособном состоянии представляется мне делом достаточно хлопотным и "мутным". На мой взгляд, было бы и проще, и прозрачней обойтись средствами Oracle Data Base.
И тут мы вспоминаем про абсолютно легальный и абсолютно бесплатный для всех видов применения, включая коммерческое, Oracle Data Base Express Edition.
Oracle DB XE - это полностью функциональный сервер, отличающийся от своих старших братьев лишь ограничениями на количество применяемых процессоров, на память и на объем базы данных. Но в том-то и дело, что данные на посреднике мы хранить и не собираемся, а нагрузка на него будет в разы меньше, чем на наш основной сервер Oracle. "Младший брат" все прекрасно выдержит и со всем прекрасно справится.
Мы действуем следующим образом:
- Ставим дополнительный Oracle DB XE (это бесплатно и легально) в сетевом смысле между нашим основным сервером и нашим клиентом.
- Даем клиенту стандартный (oci_connect($server, $user, $password)) доступ к одной из схем дополнительного Oracle DB XE (схема работника).
- Держим права этой схемы-работника на минимуме: соединиться и, в общем-то, все (create session, alter session, create synonym - что-то еще?).
- Создаем на дополнительном Oracle DB XE вторую схему (схема мастера).
- Из схемы мастера на дополнительном Oracle DB XE создаем Database Link на нужную нам схему основного сервера. Лучше, конечно, не на схему владельца данных, а на тамошнего работника с ограниченными правами.
Код нашего клиента, например, на PHP, соединяется со схемой-работником на дополнительном сервере и выполняет запрос вида
select my_xml from my_xml_vi;
или
select get_xml(:user, :password) from dual;
- т.е. либо выбор из представления, либо вызов функции, которые схеме-работнику не принадлежат, а являются синонимами доверенных активов схемы-мастера дополнительного сервера. В свою очередь, объекты схемы-мастера обращаются по Database Link к основному серверу, получают от него необходимые данные и отдают их клиенту.
Все. Задача решена. Мы имеем на дополнительном Oracle DB XE всю мощь Oracle, которая теперь служит лишь задачам публикации.
Для частной задачи мы получили полную свободу действий, надежно закрыв активы нашего основного сервера. Теперь мы можем создавать представления, представления с функциональным параметром, пакеты с конвейерными функциями и дополнительной авторизацией, логирование обращений клиента за данными и т.д. и т.п. Поскольку Oracle имеет мощный встроенный аппарат для работы с XML, мы можем осуществить преобразование табличных данных в XML в любой удобной нам точке: хоть в основном сервере, хоть в любой из двух схем дополнительного сервера. А столь же бесплатно пришедший с Oracle DB XE Oracle APEX позволит нам быстро и наглядно создать пользовательские интерфейсы для наблюдения за процессами - и для нас, и для клиента. С красивыми графиками и интерактивными отчетами.