Итак. Для начала смотрим на каком порту слушает XMLDB:
select DBMS_XDB.GETHTTPPORT() from dual;
Можно установить любой другой порт по желанию:
exec dbms_xdb.sethttpport(8080);
Синтаксис URL будет следующий: http://host:port/dad/procedure?parameter=value
Создадим DAD:
begin
dbms_epg .create_dad('dad', '/dd/*');
end;
/
здесь первый параметр - имя DAD (внутреннее, для последующего использования в настройках), второй - путь (используется в URL при запуске). Вобщем не обязаны быть похожими.
Впринципе уже можно пробовать запускать какую-нибудь процедуру типа helloworld:
create or replace procedure helloworld as
begin
htp.p('hello world');
end helloworld;
/
через URL http://localhost:8080/dd/HELLOWORLD
В этом моменте вы должны получить запрос на авторизацию - вводить нужно имя и пароль того пользователя, в схеме которого находится запускаемая процедура или (как вариант) одноименный синоним, указывающий на процедуру в другой схеме. Т.е. в именном пространстве этого пользователя должен существовать запускаемый объект с соответсвующими привилегиями.
Следующий шаг - это сделать так, чтобы при запуске URL избежать запроса авторизации, а запустить процедуру с привилегиями предопределенного пользователя. Для этого нужно выполнить
begin
dbms_epg.set_dad_attribute('dad','database-username','TT');
end;
/
Первый параметр - имя DAD, второй - имя аттрибута DAD (оставить без изменений), третий - имя нужного пользователя.
И авторизуем DAD:
begin
dbms_epg.authorize_dad('dad', 'TT') ;
end;
/
Еще понадобиться выполнить следующий код:
declare
l_xml_config sys.xmltype;
anonymous_already_set exception;
pragma exception_init(anonymous_already_set,-30936);
begin
select insertchildxml(xdburitype('/xdbconfig.xml').getxml(),'/xdbconfig/sysconfig/protocolconfig/httpconfig','allow-repository-anonymous-access',
xmltype('
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"') into l_xml_config from dual;
dbms_xdb.cfg_update(l_xml_config);
commit;
exception
when anonymous_already_set then
null;
end;
/
Это нужно для того, чтобы разрешить XMLDB анонимные соединения. Потому что несмотря на то, что мы указываем имя пользователя DAD по-умолчанию, физически соединение происходит под ANONYMOUS.
Комментариев нет:
Отправить комментарий