Java utility to generate grant privilege script for Oracle
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"); } }