Java utility to generate grant privilege script for Oracle 

Joined:
04/09/2007
Posts:
753

January 07, 2010 23:56:00    Last update: January 07, 2010 23:56:00
This is a utility that generates a script to grant privileges for an existing schema for Oracle.
import java.io.*;
import java.sql.*;

public class GenerateTablePrivilegeScript {
    private static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
    private static final String JDBC_URL = "jdbc:oracle:thin:@10.200.100.80:1521:MY_SCHEMA";
    private static final String JDBC_USER = "MY_SCHEMA";
    private static final String JDBC_PASSWD = "MY_PASSWORD";

    public static void main(String[] args) throws Exception {
        if (args.length < 1) {
            usage();
            System.exit(1);
        }

        String granteeName = args[0];

        Class.forName(JDBC_DRIVER);
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWD);
            generateScript(conn, granteeName);
        }
        finally {
            if (conn != null) conn.close();
        }
    }

    private static void generateScript(Connection conn, String granteeName) 
                        throws Exception {
        Statement stmt = conn.createStatement();
        
        ResultSet rs = stmt.executeQuery(
                            "SELECT "
                          + "owner, "
                          + "table_name, "
                          + "privilege, "
                          + "grantable "
                          + "FROM dba_tab_privs "
                          + "WHERE grantee = '" 
                          + granteeName
                          + "'");
        PrintWriter p = new PrintWriter(new FileWriter(granteeName + "_grants.sql"));
        while (rs.next()) {
            String owner = rs.getString("OWNER");
            String tableName = rs.getString("TABLE_NAME");
            String privilege = rs.getString("PRIVILEGE");
            String grantable = rs.getString("GRANTABLE");
            p.println(String.format("GRANT %s ON %s.%s TO %s %s;",
                                    privilege,
                                    owner,
                                    tableName,
                                    granteeName,
                                    "NO".equals(grantable) ? "" : "WITH GRANT OPTION"));
        }
        rs.close();
        p.close();
    }

    private static void usage() {
        System.out.println("java GenerateTablePrivilegeScript granteeName");
    }
}
Share |
| Comment  | Tags