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 >