MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/javavm/install/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/javavm/install/jvm_exp_pre_122.sql

Rem
Rem $Header: javavm/install/jvm_exp_pre_122.sql /main/1 2014/05/05 01:35:49 nneeluru Exp $
Rem
Rem jvm_exp_pre_122.sql
Rem
Rem Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
Rem
Rem    NAME
Rem      jvm_exp_pre_122.sql 
Rem
Rem    DESCRIPTION
Rem      Pre-12.2 version of the script jvm_exp.sql
Rem
Rem    NOTES
Rem      This script needs to be run during downgrade from 12.2,
Rem      to take care of shorter identifier names pre-12.2.
Rem
Rem    BEGIN SQL_FILE_METADATA 
Rem    SQL_SOURCE_FILE: javavm/install/jvm_exp_pre_122.sql 
Rem    SQL_SHIPPED_FILE: 
Rem    SQL_PHASE: 
Rem    SQL_STARTUP_MODE: NORMAL 
Rem    SQL_IGNORABLE_ERRORS: NONE 
Rem    SQL_CALLING_FILE: 
Rem    END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    nneeluru    04/21/14 - Pre-12.2 version of the script jvm_exp.sql
Rem    nneeluru    04/21/14 - Created
Rem

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100

create or replace package DBMS_JVM_EXP_PERMS AUTHID CURRENT_USER as
  TYPE temp_rec is record (
       kind        dba_java_policy.kind%TYPE,
       grantee     dba_java_policy.grantee%TYPE,
       type_schema dba_java_policy.type_schema%TYPE,
       type_name   dba_java_policy.type_name%TYPE,
       name        dba_java_policy.name%TYPE,
       action      dba_java_policy.action%TYPE,
       enabled     dba_java_policy.enabled%TYPE
       );

  TYPE temp_java_policy is table of temp_rec;

  function create_exp(objid IN number,
                      version in varchar2,
                      new_block OUT PLS_INTEGER) return varchar2;

  function grant_exp (objid IN NUMBER,
                      isdba IN PLS_INTEGER,
                      grantor OUT VARCHAR2,
                      version IN VARCHAR2,
                      new_block OUT PLS_INTEGER) RETURN varchar2;

  function audit_exp (objid IN NUMBER,
                      version IN VARCHAR2,
                      new_block OUT PLS_INTEGER) RETURN varchar2;

  function drop_exp (objid IN NUMBER,
                     version IN VARCHAR2,
                     new_block OUT PLS_INTEGER) RETURN varchar2;

  function audit_sysprivs_exp (version IN VARCHAR2,
                               new_block OUT PLS_INTEGER ) RETURN varchar2;
  function grant_sysprivs_exp(version IN varchar2,
                              new_block OUT PLS_INTEGER
                             ) return varchar2;
  procedure import_jvm_perms(pcol temp_java_policy);
  function  export_perms(state IN OUT PLS_INTEGER, new_block OUT PLS_INTEGER)
                        return varchar2;
end DBMS_JVM_EXP_PERMS;
/
show errors;

create or replace package body DBMS_JVM_EXP_PERMS as
  EXP_END    CONSTANT PLS_INTEGER := 999999;
  EXP_START  CONSTANT PLS_INTEGER := 0;
  cursor policy_q is select kind, grantee, type_schema,type_name,
                            name,action, enabled from dba_java_policy where
                            enabled='ENABLED';
  zone PLS_INTEGER := EXP_START;


  function grant_sysprivs_exp(version IN varchar2,
                              new_block OUT PLS_INTEGER
                             ) return varchar2 as

  comm_str    varchar2(4000);
  usr         varchar2(30);
  Begin
    -- Check version is >= 10.2
    if version < '10.02.00.00.00' then
      return '';
    end if;

    sys.dbms_zhelp_ir.check_sys_priv(DBMS_ZHELP_IR.KZSSTA);

    <<exp_done>>
    if zone = EXP_END then
      zone := EXP_START;
      if policy_q%ISOPEN = TRUE then
        close policy_q;
      end if;
      return '';
    end if;

    comm_str := export_perms(zone, new_block); 

    if comm_str is null then
      zone := EXP_END;
      goto exp_done;
    else
      zone := zone + 1;
      return comm_str;
    end if;
  exception
    when others then 
      zone := EXP_START;
      raise; 
  end grant_sysprivs_exp;

  function create_exp(objid IN number,
                      version in varchar2,
                      new_block OUT PLS_INTEGER) return varchar2 as
  Begin
    return '';
  end create_exp;

  function grant_exp (objid IN NUMBER,
                      isdba IN PLS_INTEGER,
                      grantor OUT VARCHAR2,
                      version IN VARCHAR2,
                      new_block OUT PLS_INTEGER) RETURN varchar2 as
  Begin
    return '';
  end grant_exp;

  function audit_exp (objid IN NUMBER,
                      version IN VARCHAR2,
                      new_block OUT PLS_INTEGER) RETURN varchar2 as
  Begin
    return '';
  end audit_exp;

  function audit_sysprivs_exp (version IN VARCHAR2,
                               new_block OUT PLS_INTEGER ) RETURN varchar2 as
  Begin
    return '';
  end audit_sysprivs_exp;

  function drop_exp (objid IN NUMBER,
                     version IN VARCHAR2,
                     new_block OUT PLS_INTEGER) RETURN varchar2 as
  Begin
    return '';
  end drop_exp;

 -- uses the temp_java_perms table built by the first part of import
 -- and adds permissions and policy permissions as necessary.
  procedure import_jvm_perms(pcol temp_java_policy) as

  row_count number;

  key       number;

  POLICYPERM CONSTANT varchar2(50) := 
        'oracle.aurora.rdbms.security.PolicyTablePermission';
  
  class  varchar2(500);
 
  action varchar2(200);

  pol_seq number :=0 ;
  run_seq number :=0 ;
 
  usr    varchar2(30);

  skey   number :=0;

  Begin

    -- Check privs 
    sys.dbms_zhelp_ir.check_sys_priv(DBMS_ZHELP_IR.KZSSTA);

    -- only SYS and SYSTEM can grant permissions so exit
    -- if neither.
    select user into usr from dual;
    if usr != 'SYS' and usr != 'SYSTEM' then
        return;
    end if;
        
    if usr = 'SYSTEM' then
        dbms_java.grant_policy_permission('SYSTEM','SYS',        
        'java.lang.RuntimePermission', 'loadLibrary.*', skey);
       if skey = -1 then
          return;
       end if;
    end if;

    -- we need to disable the RESTRICTion on RuntimePermission#LoadLibrary
    select seq into pol_seq from dba_java_policy 
           where kind = 'RESTRICT' and type_schema='SYS'
           and type_name = POLICYPERM and 
           name = '0:java.lang.RuntimePermission#loadLibrary.*' and
           enabled='ENABLED';

    if(pol_seq != 0) then
        dbms_java.disable_permission(pol_seq);
    end if;
    
    select seq into run_seq from dba_java_policy
           where kind = 'RESTRICT' and type_schema='SYS'
           and type_name = 'java.lang.RuntimePermission' and 
           name = 'loadLibrary.*' and  enabled='ENABLED';

    if(run_seq != 0) then
        dbms_java.disable_permission(run_seq);
    end if;


    -- This is the main loop that goes through each record 
    -- and check the target dba_java_policy table to see if there is
    -- a like permission there already.  If not then the permission
    -- is created.
        
    for i in pcol.FIRST .. pcol.LAST
    loop
        -- Check if permission is already in dba_java_policy
        select count(*) into row_count from dba_java_policy d where
        pcol(i).kind = d.kind and 
        pcol(i).grantee = d.grantee and
        pcol(i).type_schema = d.type_schema and 
        pcol(i).type_name = d.type_name and
        (pcol(i).name = d.name or (pcol(i).name is null and d.name is null)
         or ((d.name ='*' or d.name is null) and pcol(i).name != null)) and
        (pcol(i).action = d.action or (pcol(i).action is null and 
        d.action is null) or ((d.action = '*' or d.action is null) and
        pcol(i).action != null));
        -- If this is non-zero then we must grant or restrict
        if row_count = 0 then
          -- GRANT
          if pcol(i).kind = 'GRANT' then
          -- Policy Permissions are handled differently
            if pcol(i).type_name = POLICYPERM then
              if(instr(pcol(i).name,'0',1,1) = 0) then
                class := pcol(i).name;
                action := '';
              else
                class := substr(pcol(i).name,3,instr(pcol(i).name,'#',1,1)-3);
                action := substr(pcol(i).name,instr(pcol(i).name,'#',1,1)+1);
              end if;
              dbms_java.grant_policy_permission(pcol(i).grantee, 
                pcol(i).type_schema, class, action, key);
            else -- regular grants
              dbms_java.grant_permission(pcol(i).grantee, 
                pcol(i).type_schema||':'||pcol(i).type_name, 
                pcol(i).name, pcol(i).action,key);
            end if;
          else -- RESTRICT
            if pcol(i).type_name = POLICYPERM then
              dbms_java.restrict_permission(pcol(i).grantee,
                pcol(i).type_schema||':'||POLICYPERM, pcol(i).name,'',key);
            else
               dbms_java.restrict_permission(pcol(i).grantee,
                pcol(i).type_schema||':'||pcol(i).type_name,
                pcol(i).name, pcol(i).action,key);
            end if;
          end if;
          if pcol(i).enabled = 'DISABLE' then 
            dbms_java.disable_permission(key);
          end if;
        else
          goto end_loop;
        end if;
    <<end_loop>>
    null;
    end loop; 

    -- reenable the RESTRICTions run_seq must be first!
    if(run_seq != 0) then
       dbms_java.enable_permission(run_seq);
    end if;
    if( pol_seq != 0) then
       dbms_java.enable_permission(pol_seq);
    end if;
    if(skey != 0 and usr = 'SYSTEM') then
        dbms_java.disable_permission(skey);
        dbms_java.delete_permission(skey);
    end if;
  exception
    WHEN OTHERS THEN
     raise;
  end import_jvm_perms;

  function export_perms(state IN OUT PLS_INTEGER, new_block OUT PLS_INTEGER)
        return varchar2 as

  kind        varchar2(8);
  grantee     varchar2(30);
  type_schema varchar2(30);
  type_name   varchar2(4000);
  name        varchar2(4000);
  action      varchar2(4000);
  enabled     varchar2(8);
       
  Begin
-- open the dba_java_policy cursor and return temp table creation
    IF policy_q%ISOPEN = FALSE and state = 0 THEN
      open policy_q;
      new_block := 0;
      return 'execute immediate (''CREATE TABLE TEMP_JAVA_PRIVS' ||
             ' AS SELECT KIND, GRANTEE, TYPE_SCHEMA, TYPE_NAME,' ||
             ' NAME, ACTION, ENABLED FROM DBA_JAVA_POLICY WHERE ROWNUM > 1'');';
    end if;
--  Process the insert commands for import.
    if policy_q%ISOPEN = TRUE then
      Fetch policy_q into kind, grantee, type_schema, 
                          type_name, name, action, enabled;
      if policy_q%NOTFOUND OR policy_q%NOTFOUND IS NULL THEN
        close policy_q;
        state := EXP_END -1;
    else
  -- process each row and right the inserts
       if state = 1 then 
         new_block := 1;
       else
         new_block := 0;
       end if;
       return 'INSERT INTO TEMP_JAVA_PRIVS VALUES(''' || kind || ''',''' || 
               grantee || ''',''' || type_schema || ''',''' || type_name ||
               ''',''' || name || ''',''' || action || ''',''' ||
               enabled || ''');';
      end if;
    end if;  
    if state = EXP_END-1 then 
      new_block :=1;
      return 
'DECLARE
   TJP SYS.DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
   CURSOR C1 IS SELECT KIND,GRANTEE,TYPE_SCHEMA,TYPE_NAME,
                       NAME,ACTION,ENABLED FROM TEMP_JAVA_PRIVS;
BEGIN
   OPEN C1;
   FETCH C1 BULK COLLECT INTO TJP;
   CLOSE C1;
   SYS.DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(TJP);
   EXECUTE IMMEDIATE(''DROP TABLE TEMP_JAVA_PRIVS''); 
END;';
    end if;
-- export is done
    return '';
  end export_perms;

end DBMS_JVM_EXP_PERMS;
/ 
show errors;

DELETE FROM exppkgobj$ where package = 'DBMS_JVM_EXP_PERMS';
insert into sys.exppkgobj$ values('DBMS_JVM_EXP_PERMS', 'SYS', 1, 29, 1, 4000);
commit;



GRANT EXECUTE ON sys.dbms_jvm_exp_perms TO IMP_FULL_DATABASE;
/
GRANT EXECUTE ON sys.dbms_jvm_exp_perms TO DATAPUMP_EXP_FULL_DATABASE;
/

CREATE OR REPLACE PUBLIC SYNONYM dbms_jvm_exp_perms for sys.dbms_jvm_exp_perms;
/


OHA YOOOO