More Secure
Imagine you have an api that is called and a password or something is used in the parameters. We use exec MY_API(...) and it works just fine. However consider if someone with access to v$sql they just got anything you passed into the api and quite easily. Enter SQLCL new thing #1 starting with this build now changes all "exec my_api(...)" into an anonymous block with binds so those literals do not show up.
Procedure SECURE_API compiled KLRICE@orcl >exec secure_api('my password'); PL/SQL procedure successfully completed. KLRICE@orcl >select sql_text from v$sql where sql_text like '%secure_api%'; SQL_TEXT BEGIN secure_api(:ZSqlDevUnIq1); END; select sql_text from v$sql where sql_text like '%secure_api%' KLRICE@orcl >
REST Support
Always check the help, the tool highlights what is new to make it easy. It only took Alex 8 minutes from the download being available to seeing the new features !
@krisrice help REST : REST allows to export ORDS 3.X services.
— Alex Zaballa (@alexzaballa) September 11, 2015
This build adds the ability to extract ORDS services. Once a rest service is defined and it's time to move it from one system to another this will make it easier than ever. Simple spool to a file, export the definition and instant install script.
KLRICE@orcl >help .... REST ... KLRICE@orcl >rest REST ------ REST allows to export ORDS 3.X services. REST export - All modules REST export >module_name> - Export a specific module REST export >module_prefix> - Export a specific module related to the given prefix REST modules - List the available modules REST privileges - List the existing privileges REST schemas - List the available schemas KLRICE@orcl >rest modules NAME PREFIX STATUS ITEMS_PER_PAGE demos demos/ PUBLISHED 25 hr hr PUBLISHED 25 KLRICE@orcl >rest export hr declare l_module_id number; l_template_id number; l_handler_id number; begin l_module_id := ORDS_METADATA.ORDS_SERVICES.create_module( p_name => 'hr' , p_uri_prefix => 'hr' , p_items_per_page => 25 , p_status => 'PUBLISHED' ); l_template_id := ORDS_METADATA.ORDS_SERVICES.add_template( p_module_id => l_module_id, p_uri_template => 'everything' , p_priority => 0 , p_etag_type => 'HASH' ); l_handler_id := ORDS_METADATA.ORDS_SERVICES.add_handler( p_template_id => l_template_id, p_source_type => 'json/query' , p_method => 'GET' , p_items_per_page => 0 , p_source => 'select d.*,' || unistr('\000a') || '' || unistr('\000a') || ' cursor( select e.*' || unistr('\000a') || ' from hr.employees e where e.department_id = d.department_id) emps ' || unistr('\000a') || ' from hr.departments d'); commit; end; KLRICE@orcl >