Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да извлечете информация за хост, порт, sid, потребител и парола в java.sql.Connection

SESSION SID:

SELECT sys_context('USERENV', 'SID') FROM DUAL;

ORACLE_SID:

SELECT sys_context('userenv','instance_name') FROM dual;

ХОСТ (Машина за база данни) :

SELECT UTL_INADDR.get_host_name FROM dual;

Парола:Вижте http://www.dba-oracle.com/t_password_storage.htm

Порт от страна на клиента:

Select port from v$session;

SERVER OS PID на сървърния процес на Oracle, свързан с клиентския процес

SELECT p.spid
FROM   v$process p, v$session s
WHERE s.paddr = p.addr and 
sys_context('USERENV', 'SID') = s.sid;

Порт от страната на сървъра:

Това е наистина трудно, тъй като портът на процеса на сървъра е картографиран към порт, различен от първоначалния - например порт 12102 в listener.ora/tnsnames.ora се картографира от слушател към произволен свободен (между другото:това е причината, поради която често защитните стени трябва да бъдат изключени и докато връзките не могат да се осъществят след картографиране през защитната стена. Това може да се поправи, но това е друга история)

Под кода

  • предоставя необходимите привилегии

  • дефинира съхранена в Java функция "Util.RunThis", която изпълнява на сървъра на базата данни команда на OS, предадена на функцията и връща низ.

  • „Util.RunThis“ е съпоставен с PL/SQL функцията „RUN_CMD“

  • "GET_PORT" е PL/SQL функция, която връща числова стойност на използвания порт на процеса на сървъра на базата данни, свързан към клиентската сесия. Вътре в GET_PORT SELECT се използва за определяне на pid на процеса на сървъра на база данни, замествайки [SPID] в командата по-долу

      /usr/sbin/lsof -Pan -p [SPID] -i
    
  • накрая извиквайки просто избиране, получаваме процеса на порт на сървъра на база данни, прикачен към текущата сесия

      connect / as sysdba
    
      grant select on sys.v_$process to scott;        
      grant select on sys.v_$session to scott;
    
      begin
        dbms_java.grant_permission
            ('SCOTT',
             'SYS:java.io.FilePermission',
             '<<ALL FILES>>',
             'execute'); 
      end;
      /
    
      connect scott/[email protected]
    
      create or replace and compile java source named "Util"
      as
       import java.io.*;
       import java.lang.*;
       import java.nio.charset.Charset;
       import java.nio.*;
       public class Util extends Object
       {
         public static String RunThis(String args)
         {
           Runtime rt = Runtime.getRuntime();
           String rc = args;
    
           try
           {
    
             Process p = rt.exec(args);
    
             int bufSize = 4096;
             BufferedInputStream bis =
             new BufferedInputStream(p.getInputStream(), bufSize);
             int len;
             byte buffer[] = new byte[bufSize];
    
             // Echo back what the program spit out
             while ((len = bis.read(buffer, 0, bufSize)) != -1)
             {
               String xxx = new String(buffer, Charset.forName("UTF-8"));
               rc = rc + xxx;
             }
             p.waitFor();
    
             rc = rc + "ABC";
    
           }
           catch (Exception e)
           {
             e.printStackTrace();
             rc = "Exception!!!" ;
           }
    
           finally
           {
             return rc;
           }
         }
       }
      /
    
      create or replace function RUN_CMD( p_cmd in varchar2) return VARCHAR2
      as language java
      name 'Util.RunThis(java.lang.String) return java.lang.String';
      /
    
      create or replace function GET_PORT return number
      as
        SPID NUMBER;
        retval varchar2(32000);
        y varchar2(1024);
        cmd VARCHAR2(256);
      begin
        SELECT 
          p.spid 
        INTO 
          SPID
        FROM   
          sys.v_$process p, 
          sys.v_$session s
        WHERE 
          s.paddr = p.addr and 
          sys_context('USERENV', 'SID') = s.sid;
    
        cmd :=  '/usr/sbin/lsof -Pan -p [SPID] -i';
    
        /* raw string data returned from Shell executing cmd */
        retval := run_cmd(replace(cmd,'[SPID]', SPID));
    
        /* get last occurance of : marking redirected port */
        y := substr(retval,INSTR(retval,':', -1)+1,1024);
    
        /* return the numeric port by stripping info like " (ESTABLISHED)" */
        return to_number(substr(y,1,INSTR(y, ' ')-1));
      end;
      /
      show errors
    
      select get_port from dual;
    
      /*-------------------- OUTPUT -------------------------- */
    
      SQL> connect / as sysdba
    
      grant select on sys.v_$process to scott;
    
      grant select on sys.v_$session to scott;
    
      begin
        dbms_java.grant_permission
            ('SCOTT',
             'SYS:java.io.FilePermission',
             '<<ALL FILES>>',
             'execute');
      end;
      /Connected.
      SQL> SQL>
      Grant succeeded.
    
      SQL> SQL>
      Grant succeeded.
    
      SQL> SQL>   2    3    4    5    6    7    8
    
      PL/SQL procedure successfully completed.
    
      SQL> connect scott/[email protected]
    
      Connected.
      SQL> create or replace and compile java source named "Util"
        2  as
       import java.io.*;
       import java.lang.*;
       import java.nio.charset.Charset;
        3    4    5    6   import java.nio.*;
        7   public class Util extends Object
        8   {
        9     public static String RunThis(String args)
         {
           Runtime rt = Runtime.getRuntime();
       10   11   12       String rc = args;
       13
       14       try
       15       {
       16
       17         Process p = rt.exec(args);
    
       18   19         int bufSize = 4096;
       20         BufferedInputStream bis =
       21         new BufferedInputStream(p.getInputStream(), bufSize);
       22         int len;
             byte buffer[] = new byte[bufSize];
       23   24
             // Echo back what the program spit out
             while ((len = bis.read(buffer, 0, bufSize)) != -1)
       25   26   27         {
       28           String xxx = new String(buffer, Charset.forName("UTF-8"));
       29           rc = rc + xxx;
       30         }
             p.waitFor();
       31   32
             rc = rc + "ABC";
    
       33   34   35       }
       36       catch (Exception e)
       37       {
       38         e.printStackTrace();
       39         rc = "Exception!!!" ;
       40       }
       41
       42       finally
       43       {
       44         return rc;
       45       }
         }
       46   47   }
      / 48
    
      Java created.
    
      SQL> create or replace function RUN_CMD( p_cmd in varchar2) return VARCHAR2
      as language java
      name 'Util.RunThis(java.lang.String) return java.lang.String';
      /  2    3    4
    
      Function created.
    
      SQL> create or replace function GET_PORT return number
      as
        SPID NUMBER;
        retval varchar2(32000);
        2    3    4    5    y varchar2(1024);
        cmd VARCHAR2(256);
      begin
        6    7    8    SELECT
          p.spid
        INTO
        9   10   11      SPID
        FROM
          sys.v_$process p,
          sys.v_$session s
        WHERE
       12   13   14   15   16      s.paddr = p.addr and
          sys_context('USERENV', 'SID') = s.sid;
    
        cmd :=  '/usr/sbin/lsof -Pan -p [SPID] -i';
    
       17   18   19   20   21    /* raw string data returned from Shell executing cmd */
        retval := run_cmd(replace(cmd,'[SPID]', SPID));
    
       22   23   24    /* get last occurance of : marking redirected port */
        y := substr(retval,INSTR(retval,':', -1)+1,1024);
    
        /* return the numeric port by stripping info like " (ESTABLISHED)" */
       25   26   27   28    return to_number(substr(y,1,INSTR(y, ' ')-1));
      end;
      /
      show errors 29   30
      Function created.
    
      SQL>
      No errors.
      SQL> select get_port from dual;
    
        GET_PORT
      ----------
           36586
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL:пренапишете израза SELECT, като използвате IN параметър в съхранена процедура

  2. Синтактична грешка на Oracle

  3. Oracle Advanced Queue в Java

  4. Как да криптирате данни в Oracle с помощта на PL SQL

  5. Java:Връщане на XMLType данни от StoredProcedure, използване на ojdbc6.jar xdb6.jar xmlparserv2.jar за взаимодействие между Java и PLSQL