• listener.ora中PLSExtPro 和ExtProc的作用(转)



    默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中,是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,但一般不会使用它,可以直接从listener.ora中将这项移除,因为对ExtProc已经有多种攻击手段了,在不使用外部程序时,oracle也是建议删除的。

    PLSExtPro 是pl/sql   external  procdure 的意思,就是在pl/sql中调用外部语句,如c,java写的过程。

    现在,Oracle已经全面支持JAVA了,这东西也就过时了,之所以继续保留是考虑到兼容以前老版本的数据库实例。

     有时可能会在多个数据库实例之间拷贝listener.ora,请检查拷贝来的文件中是否含有不需要的服务,确保只留下的确需要的服务项目,减少监听器受攻击的面。

    http://blog.chinaunix.net/uid-23177306-id-2531135.html

    典型的listener.ora 文件内容:

    SID_LIST_LISTENER =   (注册到监听器的service name所在区域)
      (SID_LIST =
        (SID_DESC =       (对外部过程调用的服务名)
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /u01/product/oracle)
          (PROGRAM = extproc)
        )
      )

    LISTENER =     (监听名称)
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = franklindb)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))   (对外部过程调用的监听信息)
        )
      )

    -- 备注 --   
         默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中,
    是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,
    但一般不会使用它。可以直接从listener.ora中将这项移除,因为对ExtProc已经有多
    种攻击手段了,在不使用外部程序时,oracle也是建议删除的。
      PLSExtProc是pl/sql external procdure的意思,就是在pl/sql中调用外部语句,
    如c、java写的过程。现在,Oracle已经全面支持JAVA了,这东西也就过时了,之所以
    继续保留是考虑到兼容以前老版本的数据库。
      有时可能会在多个数据库实例之间拷贝listener.ora,检查拷贝来的文件中是否
    含有不需要的服务,确保只留下的确需要的服务项目,减少监听器受攻击的面。
    http://blog.itpub.net/24419958/viewspace-673107/

    tnsnames.ora默认会有如下内容
    EXTPROC_CONNECTION_DATA =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
    (SID = PLSExtProc)
    (PRESENTATION = RO)
    )
    )
    这个主要用于调用外部过程。如使用全文检索时就需要设置EXTPROC_CONNECTION_DATA
    一般对我们是没啥用的

    http://zhidao.baidu.com/link?url=IadLwPA4XM6C2K26tf8qKgplbB5eJZvMukPfpCBTpw1Ro17PhADnWsPwh515aZyooViYKeCTokh3Vyqeqc92fq



    在编程过程中,我们可能会发现有些功能通过PL/SQL完成会很麻烦,而通过C/C++语言编程则会容易很多。因此,Oracle提供了在PL/SQL程序里直接调用外部函数(包括C函数或Java方法)的功能。调用外部函数的过程如下:
    ——用户进程执行PL/SQL程序。
    ——在执行的PL/SQL程序过程中,调用了一个C/C++语言写的函数:c_func。这里需要借助别名库(Alias Library)。别命苦是数据库里的一个对象,用来描述一个外部函数所在的动态链接库的路径和名称。通过别名库,从而可以知道调用的外部函数在哪个文件里。
    ——PL/SQL将对外部函数的调用请求发给监听器。
    ——监听器生成一个extproc进程,该进程专门用来处理对外部函数的调用。每个session都会生成一个属于该session的extproc进程,并且在整个session生命周期里,extproc进程会一直存在。
    ——Extproc进程负责将别名库所指定的动态链接库文件加载到内存。
    ——Extproc进程执行指定的外部函数,并将结果返回给服务器进程,进而返回给用户进程。
    需要对监听器进行配置(在listener.ora文件中配置),从而启动extproc进程。其中“(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))”说明监听extproc进程请求的地址;而SID_DESC部分则说明extproc进程的连接信息。
    然后我们还要配置tnsnames.ora文件,注意,该文件也必须位于数据库服务器端(应该是说,tnsname.ora文件的以下内容属于数据库客户端的)。我们需要添加如下内容:
    EXTPROC_CONNECTION_DATA=
    (DESCRIPTION=
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
    )
    (CONNECT_DATA=
    (SID=PLSExtProc)
    )
    )
    配置完毕以后,可以尝试tnsping 连接字符串名称,如果成功,则说明监听没有问题。
    [oracle@book admin]$ tnsping EXTPROC_CONNECTION_DATA
    
    下面用例子说明上面内容。
    接下来,我们创建一个C语言编写的函数,如下:
    [oracle@book ~]$ vi calc_tax.c
    calc_tax(n)
    int n;
    {
    int tax;
    tax=(n*15)/100;
    return(tax);
    }
    该函数完成的功能非常简单,计算传入参数的15%,并作为税额返回给调用者。
    将calc_tax.c文件编译成动态链接库,并将生成的库文件复制到$ORACLE_HOME/bin目录下:
    [oracle@book ~]$ cc -shared -o calc_tax.so calc_tax.c
    [oracle@book ~]$ cp calc_tax.so $ORACLE_HOME/bin
    然后,我们创建一个别名库,用来说明将要调用的C函数所在的库文件,并将使用c_code别名库的权限赋给HR用户:
    SQL> connect / as sysdba
    SQL> create or replace library c_code as '$ORACLE_HOME/bin/calc_tax.so';
    2 /
    SQL> grant execute on c_code to hr;
    要使用这个calc_tax函数,还需要在数据库里创建一个调用声明。如下所示:
    SQL> connect hr/hr
    SQL> create or replace function call_c
    2 (x binary_integer)
    3 return binary_integer
    4 as language c
    5 library sys.c_code
    6 name "calc_tax";
    7 /
    在调用声明里定义了calc_tax函数的传入传出参数、所在的别名库名称(library sys.c_code 部分)以及在动态链接库中的函数名(name "calc_tax")等。
    现在,我们就可以通过调用call_c,进而调用calc_tax函数了。如下所示:
    SQL> set serveroutput on
    SQL> var v_salary number;
    SQL> var v_tax number;
    SQL> exec :v_salary := 10000;
    SQL> exec :v_tax := call_c(:v_salary);
    SQL> print v_tax;
    V_TAX
    -----------
    1500
    从返回结果可以看到,我们成功调用了C函数calc_tax。
    http://blog.csdn.net/haiross/article/details/12912195
  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/softidea/p/4885529.html
Copyright © 2020-2023  润新知