From f238b25361537922d3ab39cbf080a3eb8dd12f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Thu, 15 Mar 2012 23:09:35 +0800 Subject: [PATCH] add sql wall support --- .../druid/filter/wall/WallProvider.java | 8 + .../alibaba/druid/filter/wall/WallUtils.java | 6 + .../druid/filter/wall/WallVisitor.java | 14 + .../filter/wall/spi/MySqlWallVisitor.java | 69 +- .../filter/wall/spi/OracleWallVisitor.java | 150 ++- .../filter/wall/spi/WallVisitorUtils.java | 87 +- .../com/alibaba/druid/util/JdbcUtils.java | 2 +- .../druid-filter-wall-permit-function.txt | 1194 +++++++++++++++++ .../druid/bvt/filter/wall/OracleWallTest.java | 16 + .../alibaba/druid/sql/OnlineOracleTest3.java | 2 +- 10 files changed, 1509 insertions(+), 39 deletions(-) create mode 100644 src/main/resources/META-INF/druid-filter-wall-permit-function.txt create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest.java diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java b/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java index 650eaf8f1f..1eb2bba792 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java @@ -5,6 +5,7 @@ import java.util.List; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.parser.Token; public abstract class WallProvider { @@ -48,6 +49,13 @@ public abstract class WallProvider { parser.getLexer().setAllowComment(false); // permit comment List statementList = parser.parseStatementList(); + if(parser.getLexer().token() != Token.EOF) { + if (throwException) { + throw new WallRuntimeException("illegal statement : " + sql); + } + + return false; + } if (statementList.size() > 1) { if (throwException) { throw new WallRuntimeException("multi-statement : " + sql); diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallUtils.java b/src/main/java/com/alibaba/druid/filter/wall/WallUtils.java index af188ce277..e2ad2254e2 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallUtils.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallUtils.java @@ -1,6 +1,7 @@ package com.alibaba.druid.filter.wall; import com.alibaba.druid.filter.wall.spi.MySqlWallProvider; +import com.alibaba.druid.filter.wall.spi.OracleWallProvider; public class WallUtils { @@ -8,4 +9,9 @@ public class WallUtils { MySqlWallProvider provider = new MySqlWallProvider(); return provider.check(sql, false); } + + public static boolean isValidateOracle(String sql) { + OracleWallProvider provider = new OracleWallProvider(); + return provider.check(sql, false); + } } diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java index d524d78250..3c711f6553 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java @@ -1,10 +1,24 @@ package com.alibaba.druid.filter.wall; import java.util.List; +import java.util.Set; +import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public interface WallVisitor extends SQLASTVisitor { List getViolations(); + + Set getPermitFunctions(); + + Set getPermitSchemas(); + + Set getPermitTables(); + + boolean containsPermitTable(String name); + + Set getPermitNames(); + + String toSQL(SQLObject obj); } diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java index bce63784ac..7fa6a35dc4 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java @@ -9,15 +9,13 @@ import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; import com.alibaba.druid.filter.wall.Violation; import com.alibaba.druid.filter.wall.WallVisitor; import com.alibaba.druid.sql.SQLUtils; -import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; -import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; -import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; @@ -30,9 +28,10 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitorAdapter; public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisitor { - private Set permitFunctions = new HashSet(); - private Set permitTablesoures = new HashSet(); - private Set permitSchemas = new HashSet(); + private final Set permitFunctions = new HashSet(); + private final Set permitTables = new HashSet(); + private final Set permitSchemas = new HashSet(); + private final Set permiNames = new HashSet(); private final List violations; @@ -40,6 +39,22 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi this(new ArrayList()); } + public Set getPermitNames() { + return permiNames; + } + + public Set getPermitFunctions() { + return permitFunctions; + } + + public Set getPermitTables() { + return permitTables; + } + + public Set getPermitSchemas() { + return permitSchemas; + } + public MySqlWallVisitor(List violations){ this.violations = violations; @@ -57,7 +72,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi permitSchemas.add("information_schema"); permitSchemas.add("mysql"); - permitTablesoures.add("outfile"); + permitTables.add("outfile"); } public List getViolations() { @@ -127,28 +142,16 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean visit(SQLMethodInvokeExpr x) { - String methodName = x.getMethodName(); - - if (permitFunctions.contains(methodName.toLowerCase())) { - violations.add(new IllegalSQLObjectViolation(SQLUtils.toMySqlString(x))); - } + WallVisitorUtils.check(this, x); return true; } public boolean visit(SQLExprTableSource x) { - SQLExpr expr = x.getExpr(); + WallVisitorUtils.check(this, x); - if (expr instanceof SQLPropertyExpr) { - SQLPropertyExpr propExpr = (SQLPropertyExpr) expr; - - if (propExpr.getOwner() instanceof SQLIdentifierExpr) { - String ownerName = ((SQLIdentifierExpr) propExpr.getOwner()).getName(); - - if (permitSchemas.contains(ownerName.toLowerCase())) { - violations.add(new IllegalSQLObjectViolation(SQLUtils.toMySqlString(x))); - } - } + if (x.getExpr() instanceof SQLName) { + return false; } return true; @@ -162,18 +165,22 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean visit(SQLUnionQuery x) { - if (queryBlockFromIsNull(x.getLeft()) || queryBlockFromIsNull(x.getRight())) { + if (WallVisitorUtils.queryBlockFromIsNull(x.getLeft()) || WallVisitorUtils.queryBlockFromIsNull(x.getRight())) { violations.add(new IllegalSQLObjectViolation(SQLUtils.toMySqlString(x))); } return true; } - private static boolean queryBlockFromIsNull(SQLSelectQuery query) { - if (query instanceof SQLSelectQueryBlock) { - return ((SQLSelectQueryBlock) query).getFrom() == null; - } - - return false; + @Override + public String toSQL(SQLObject obj) { + return SQLUtils.toMySqlString(obj); } + + @Override + public boolean containsPermitTable(String name) { + name = WallVisitorUtils.form(name); + return permitTables.contains(name); + } + } diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java index 4bfb9e98f0..4e1c4c78aa 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java @@ -1,18 +1,43 @@ package com.alibaba.druid.filter.wall.spi; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashSet; import java.util.List; +import java.util.Set; import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; import com.alibaba.druid.filter.wall.Violation; import com.alibaba.druid.filter.wall.WallVisitor; +import com.alibaba.druid.logging.Log; +import com.alibaba.druid.logging.LogFactory; import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVIsitorAdapter; +import com.alibaba.druid.util.JdbcUtils; public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVisitor { + private final static Log LOG = LogFactory.getLog(OracleWallVisitor.class); + + private final Set permitFunctions = new HashSet(); + private final Set permitTables = new HashSet(); + private final Set permitSchemas = new HashSet(); + private final Set permitNames = new HashSet(); + private final List violations; public OracleWallVisitor(){ @@ -21,20 +46,143 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi public OracleWallVisitor(List violations){ this.violations = violations; + + addPermitFunction("sys_context"); + addPermitFunction("userenv"); + addPermitFunction("sys_guid"); + addPermitFunction("sys_typeid"); + + addPermitName("uid"); + addPermitName("user"); + + loadPermitTables(); + + } + + private void loadPermitTables() { + try { + Enumeration e = Thread.currentThread().getContextClassLoader().getResources("META-INF/druid-filter-wall-permit-function.txt"); + while (e.hasMoreElements()) { + URL url = e.nextElement(); + InputStream in = null; + BufferedReader reader = null; + try { + in = url.openStream(); + reader = new BufferedReader(new InputStreamReader(in)); + for (;;) { + String line = reader.readLine(); + if (line == null) { + break; + } + line = line.trim(); + if (line.length() > 0) { + addPermitTable(line); + } + } + + url.openStream(); + } finally { + JdbcUtils.close(reader); + JdbcUtils.close(in); + } + } + } catch (IOException e) { + LOG.error("load oracle permit tables errror", e); + } + } + + public void addPermitName(String name) { + name = name.toLowerCase(); + permitNames.add(name); + } + + public void addPermitFunction(String name) { + name = name.toLowerCase(); + permitFunctions.add(name); + } + + public void addPermitTable(String name) { + name = name.toLowerCase(); + permitTables.add(name); + } + + + public Set getPermitNames() { + return permitNames; + } + + public Set getPermitFunctions() { + return permitFunctions; + } + + public Set getPermitTables() { + return permitTables; + } + + public Set getPermitSchemas() { + return permitSchemas; } public List getViolations() { return violations; } + public boolean visit(SQLIdentifierExpr x) { + + return true; + } + + // executeQuery public boolean visit(SQLBinaryOpExpr x) { WallVisitorUtils.check(this, x); return true; } - + public boolean visit(SQLDropTableStatement x) { violations.add(new IllegalSQLObjectViolation(SQLUtils.toOracleString(x))); return false; } + + @Override + public boolean visit(SQLMethodInvokeExpr x) { + WallVisitorUtils.check(this, x); + + return true; + } + + public boolean visit(OracleSelectTableReference x) { + WallVisitorUtils.check(this, x); + return true; + } + + public boolean visit(SQLExprTableSource x) { + WallVisitorUtils.check(this, x); + + if (x.getExpr() instanceof SQLName) { + return false; + } + + return true; + } + + @Override + public boolean visit(SQLUnionQuery x) { + if (WallVisitorUtils.queryBlockFromIsNull(x.getLeft()) || WallVisitorUtils.queryBlockFromIsNull(x.getRight())) { + violations.add(new IllegalSQLObjectViolation(SQLUtils.toMySqlString(x))); + } + + return true; + } + + @Override + public String toSQL(SQLObject obj) { + return SQLUtils.toOracleString(obj); + } + + @Override + public boolean containsPermitTable(String name) { + name = WallVisitorUtils.form(name); + return permitTables.contains(name); + } } diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java index b9405a603f..25a8cd2b0f 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java @@ -4,16 +4,20 @@ import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; import com.alibaba.druid.filter.wall.WallVisitor; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNCharExpr; import com.alibaba.druid.sql.ast.expr.SQLNotExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; +import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; @@ -108,7 +112,7 @@ public class WallVisitorUtils { if (x.getLeft() instanceof SQLNullExpr && x.getRight() instanceof SQLNullExpr) { return false; } - + if (leftResult == null || rightResult == null) { return null; } @@ -151,7 +155,7 @@ public class WallVisitorUtils { return null; } - + public static Object getValue(SQLExpr x) { if (x instanceof SQLBinaryOpExpr) { return getValue((SQLBinaryOpExpr) x); @@ -164,11 +168,11 @@ public class WallVisitorUtils { if (x instanceof SQLNumericLiteralExpr) { return ((SQLNumericLiteralExpr) x).getNumber(); } - + if (x instanceof SQLCharExpr) { return ((SQLCharExpr) x).getText(); } - + if (x instanceof SQLNCharExpr) { return ((SQLNCharExpr) x).getText(); } @@ -226,7 +230,7 @@ public class WallVisitorUtils { SQLSelectQueryBlock queryBlock = (SQLSelectQueryBlock) query; boolean allawTrueWhere = false; - + if (queryBlock.getWhere() == null) { allawTrueWhere = true; } else { @@ -254,4 +258,77 @@ public class WallVisitorUtils { return false; } + + public static void check(WallVisitor visitor, SQLMethodInvokeExpr x) { + String methodName = x.getMethodName(); + + if (visitor.getPermitFunctions().contains(methodName.toLowerCase())) { + visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); + } + + } + + public static void check(WallVisitor visitor, SQLExprTableSource x) { + SQLExpr expr = x.getExpr(); + + String tableName = null; + if (expr instanceof SQLPropertyExpr) { + SQLPropertyExpr propExpr = (SQLPropertyExpr) expr; + + if (propExpr.getOwner() instanceof SQLIdentifierExpr) { + String ownerName = ((SQLIdentifierExpr) propExpr.getOwner()).getName(); + + if (visitor.getPermitSchemas().contains(ownerName.toLowerCase())) { + visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); + } + } + + tableName = propExpr.getName(); + } + + if (expr instanceof SQLIdentifierExpr) { + tableName = ((SQLIdentifierExpr) expr).getName(); + } + + if (tableName != null) { + tableName = form(tableName); + if (visitor.getPermitTables().contains(tableName)) { + visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); + } + } + } + + public static boolean queryBlockFromIsNull(SQLSelectQuery query) { + if (query instanceof SQLSelectQueryBlock) { + SQLTableSource from = ((SQLSelectQueryBlock) query).getFrom(); + + if (from == null) { + return true; + } + + if (from instanceof SQLExprTableSource) { + SQLExpr fromExpr = ((SQLExprTableSource) from).getExpr(); + if (fromExpr instanceof SQLName) { + String name = fromExpr.toString(); + + name = form(name); + + if (name.equalsIgnoreCase("DUAL")) { + return true; + } + } + } + } + + return false; + } + + public static String form(String name) { + if (name.startsWith("\"") && name.endsWith("\"")) { + name = name.substring(1, name.length() - 1); + } + + name = name.toLowerCase(); + return name; + } } diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index 63c9e6d90f..c68665c388 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -353,7 +353,7 @@ public final class JdbcUtils { } } - + public static String read(Reader reader) { try { final int DEFAULT_BUFFER_SIZE = 1024 * 4; diff --git a/src/main/resources/META-INF/druid-filter-wall-permit-function.txt b/src/main/resources/META-INF/druid-filter-wall-permit-function.txt new file mode 100644 index 0000000000..10e6671a7d --- /dev/null +++ b/src/main/resources/META-INF/druid-filter-wall-permit-function.txt @@ -0,0 +1,1194 @@ +ALL_ALL_TABLES +ALL_APPLY +ALL_APPLY_CHANGE_HANDLERS +ALL_APPLY_CONFLICT_COLUMNS +ALL_APPLY_DML_HANDLERS +ALL_APPLY_ENQUEUE +ALL_APPLY_ERROR +ALL_APPLY_ERROR_MESSAGES +ALL_APPLY_EXECUTE +ALL_APPLY_KEY_COLUMNS +ALL_APPLY_PARAMETERS +ALL_APPLY_PROGRESS +ALL_APPLY_TABLE_COLUMNS +ALL_ARGUMENTS +ALL_ASSEMBLIES +ALL_ASSOCIATIONS +ALL_AUDIT_POLICIES +ALL_AUDIT_POLICY_COLUMNS +ALL_AW_PS +ALL_AWS +ALL_BASE_TABLE_MVIEWS +ALL_CAPTURE +ALL_CAPTURE_EXTRA_ATTRIBUTES +ALL_CAPTURE_PARAMETERS +ALL_CAPTURE_PREPARED_DATABASE +ALL_CAPTURE_PREPARED_SCHEMAS +ALL_CAPTURE_PREPARED_TABLES +ALL_CATALOG +ALL_CHANGE_PROPAGATION_SETS +ALL_CHANGE_PROPAGATIONS +ALL_CHANGE_SETS +ALL_CHANGE_SOURCES +ALL_CHANGE_TABLES +ALL_CLUSTER_HASH_EXPRESSIONS +ALL_CLUSTERS +ALL_COL_COMMENTS +ALL_COL_PENDING_STATS +ALL_COL_PRIVS +ALL_COL_PRIVS_MADE +ALL_COL_PRIVS_RECD +ALL_COLL_TYPES +ALL_CONS_COLUMNS +ALL_CONS_OBJ_COLUMNS +ALL_CONSTRAINTS +ALL_CONTEXT +ALL_CUBE_ATTR_VISIBILITY +ALL_CUBE_ATTRIBUTES +ALL_CUBE_BUILD_PROCESSES +ALL_CUBE_CALCULATED_MEMBERS +ALL_CUBE_DIM_LEVELS +ALL_CUBE_DIM_MODELS +ALL_CUBE_DIM_VIEW_COLUMNS +ALL_CUBE_DIM_VIEWS +ALL_CUBE_DIMENSIONALITY +ALL_CUBE_DIMENSIONS +ALL_CUBE_HIER_LEVELS +ALL_CUBE_HIER_VIEW_COLUMNS +ALL_CUBE_HIER_VIEWS +ALL_CUBE_HIERARCHIES +ALL_CUBE_MEASURES +ALL_CUBE_VIEW_COLUMNS +ALL_CUBE_VIEWS +ALL_CUBES +ALL_DB_LINKS +ALL_DEF_AUDIT_OPTS +ALL_DEPENDENCIES +ALL_DEQUEUE_QUEUES +ALL_DIM_ATTRIBUTES +ALL_DIM_CHILD_OF +ALL_DIM_HIERARCHIES +ALL_DIM_JOIN_KEY +ALL_DIM_LEVEL_KEY +ALL_DIM_LEVELS +ALL_DIMENSIONS +ALL_DIRECTORIES +ALL_EDITION_COMMENTS +ALL_EDITIONING_VIEW_COLS +ALL_EDITIONING_VIEW_COLS_AE +ALL_EDITIONING_VIEWS +ALL_EDITIONING_VIEWS_AE +ALL_EDITIONS +ALL_ENCRYPTED_COLUMNS +ALL_ERRORS +ALL_ERRORS_AE +ALL_EVALUATION_CONTEXT_TABLES +ALL_EVALUATION_CONTEXT_VARS +ALL_EVALUATION_CONTEXTS +ALL_EXTERNAL_LOCATIONS +ALL_EXTERNAL_TABLES +ALL_FILE_GROUP_EXPORT_INFO +ALL_FILE_GROUP_FILES +ALL_FILE_GROUP_TABLES +ALL_FILE_GROUP_TABLESPACES +ALL_FILE_GROUP_VERSIONS +ALL_FILE_GROUPS +ALL_HISTOGRAMS +ALL_IDENTIFIERS +ALL_IND_COLUMNS +ALL_IND_EXPRESSIONS +ALL_IND_PARTITIONS +ALL_IND_PENDING_STATS +ALL_IND_STATISTICS +ALL_IND_SUBPARTITIONS +ALL_INDEXES +ALL_INDEXTYPE_ARRAYTYPES +ALL_INDEXTYPE_COMMENTS +ALL_INDEXTYPE_OPERATORS +ALL_INDEXTYPES +ALL_INTERNAL_TRIGGERS +ALL_JAVA_ARGUMENTS +ALL_JAVA_CLASSES +ALL_JAVA_COMPILER_OPTIONS +ALL_JAVA_DERIVATIONS +ALL_JAVA_FIELDS +ALL_JAVA_IMPLEMENTS +ALL_JAVA_INNERS +ALL_JAVA_LAYOUTS +ALL_JAVA_METHODS +ALL_JAVA_NCOMPS +ALL_JAVA_RESOLVERS +ALL_JAVA_THROWS +ALL_JOBS +ALL_JOIN_IND_COLUMNS +ALL_LIBRARIES +ALL_LOB_PARTITIONS +ALL_LOB_SUBPARTITIONS +ALL_LOB_TEMPLATES +ALL_LOBS +ALL_LOG_GROUP_COLUMNS +ALL_LOG_GROUPS +ALL_MEASURE_FOLDER_CONTENTS +ALL_MEASURE_FOLDERS +ALL_METHOD_PARAMS +ALL_METHOD_RESULTS +ALL_MINING_MODEL_ATTRIBUTES +ALL_MINING_MODEL_SETTINGS +ALL_MINING_MODELS +ALL_MVIEW_AGGREGATES +ALL_MVIEW_ANALYSIS +ALL_MVIEW_COMMENTS +ALL_MVIEW_DETAIL_PARTITION +ALL_MVIEW_DETAIL_RELATIONS +ALL_MVIEW_DETAIL_SUBPARTITION +ALL_MVIEW_JOINS +ALL_MVIEW_KEYS +ALL_MVIEW_LOGS +ALL_MVIEW_REFRESH_TIMES +ALL_MVIEWS +ALL_NESTED_TABLE_COLS +ALL_NESTED_TABLES +ALL_OBJ_COLATTRS +ALL_OBJECT_TABLES +ALL_OBJECTS +ALL_OBJECTS_AE +ALL_OPANCILLARY +ALL_OPARGUMENTS +ALL_OPBINDINGS +ALL_OPERATOR_COMMENTS +ALL_OPERATORS +ALL_OUTLINE_HINTS +ALL_OUTLINES +DBA_2PC_NEIGHBORS +DBA_2PC_PENDING +DBA_ADDM_FDG_BREAKDOWN +DBA_ADDM_FINDINGS +DBA_ADDM_INSTANCES +DBA_ADDM_SYSTEM_DIRECTIVES +DBA_ADDM_TASK_DIRECTIVES +DBA_ADDM_TASKS +DBA_ADVISOR_ACTIONS +DBA_ADVISOR_COMMANDS +DBA_ADVISOR_DEF_PARAMETERS +DBA_ADVISOR_DEFINITIONS +DBA_ADVISOR_DIR_DEFINITIONS +DBA_ADVISOR_DIR_INSTANCES +DBA_ADVISOR_DIR_TASK_INST +DBA_ADVISOR_EXEC_PARAMETERS +DBA_ADVISOR_EXECUTION_TYPES +DBA_ADVISOR_EXECUTIONS +DBA_ADVISOR_FDG_BREAKDOWN +DBA_ADVISOR_FINDING_NAMES +DBA_ADVISOR_FINDINGS +DBA_ADVISOR_JOURNAL +DBA_ADVISOR_LOG +DBA_ADVISOR_OBJECT_TYPES +DBA_ADVISOR_OBJECTS +DBA_ADVISOR_PARAMETERS +DBA_ADVISOR_RATIONALE +DBA_ADVISOR_RECOMMENDATIONS +DBA_ADVISOR_SQLA_REC_SUM +DBA_ADVISOR_SQLA_TABLES +DBA_ADVISOR_SQLA_WK_MAP +DBA_ADVISOR_SQLA_WK_STMTS +DBA_ADVISOR_SQLPLANS +DBA_ADVISOR_SQLSTATS +DBA_ADVISOR_SQLW_JOURNAL +DBA_ADVISOR_SQLW_PARAMETERS +DBA_ADVISOR_SQLW_STMTS +DBA_ADVISOR_SQLW_SUM +DBA_ADVISOR_SQLW_TABLES +DBA_ADVISOR_SQLW_TEMPLATES +DBA_ADVISOR_TASKS +DBA_ADVISOR_TEMPLATES +DBA_ADVISOR_USAGE +DBA_ALERT_HISTORY +DBA_ALL_TABLES +DBA_APPLICATION_ROLES +DBA_APPLY +DBA_APPLY_CHANGE_HANDLERS +DBA_APPLY_CONFLICT_COLUMNS +DBA_APPLY_DML_HANDLERS +DBA_APPLY_ENQUEUE +DBA_APPLY_ERROR +DBA_APPLY_ERROR_MESSAGES +DBA_APPLY_EXECUTE +DBA_APPLY_INSTANTIATED_GLOBAL +DBA_APPLY_INSTANTIATED_OBJECTS +DBA_APPLY_INSTANTIATED_SCHEMAS +DBA_APPLY_KEY_COLUMNS +DBA_APPLY_OBJECT_DEPENDENCIES +DBA_APPLY_PARAMETERS +DBA_APPLY_PROGRESS +DBA_APPLY_SPILL_TXN +DBA_APPLY_TABLE_COLUMNS +DBA_APPLY_VALUE_DEPENDENCIES +DBA_AQ_AGENT_PRIVS +DBA_AQ_AGENTS +DBA_ARGUMENTS +DBA_ASSEMBLIES +DBA_ASSOCIATIONS +DBA_ATTRIBUTE_TRANSFORMATIONS +DBA_AUDIT_EXISTS +DBA_AUDIT_MGMT_CLEAN_EVENTS +DBA_AUDIT_MGMT_CLEANUP_JOBS +DBA_AUDIT_MGMT_CONFIG_PARAMS +DBA_AUDIT_MGMT_LAST_ARCH_TS +DBA_AUDIT_OBJECT +DBA_AUDIT_POLICIES +DBA_AUDIT_POLICY_COLUMNS +DBA_AUDIT_SESSION +DBA_AUDIT_STATEMENT +DBA_AUDIT_TRAIL +DBA_AUTO_SEGADV_CTL +DBA_AUTO_SEGADV_SUMMARY +DBA_AUTOTASK_CLIENT +DBA_AUTOTASK_CLIENT_HISTORY +DBA_AUTOTASK_CLIENT_JOB +DBA_AUTOTASK_JOB_HISTORY +DBA_AUTOTASK_OPERATION +DBA_AUTOTASK_SCHEDULE +DBA_AUTOTASK_TASK +DBA_AUTOTASK_WINDOW_CLIENTS +DBA_AUTOTASK_WINDOW_HISTORY +DBA_AW_PS +DBA_AWS +DBA_BASE_TABLE_MVIEWS +DBA_BLOCKERS +DBA_CAPTURE +DBA_CAPTURE_EXTRA_ATTRIBUTES +DBA_CAPTURE_PARAMETERS +DBA_CAPTURE_PREPARED_DATABASE +DBA_CAPTURE_PREPARED_SCHEMAS +DBA_CAPTURE_PREPARED_TABLES +DBA_CATALOG +DBA_CHANGE_NOTIFICATION_REGS +DBA_CLU_COLUMNS +DBA_CLUSTER_HASH_EXPRESSIONS +DBA_CLUSTERS +DBA_COL_COMMENTS +DBA_COL_PENDING_STATS +DBA_COL_PRIVS +DBA_COLL_TYPES +DBA_COMMON_AUDIT_TRAIL +DBA_COMPARISON +DBA_COMPARISON_COLUMNS +DBA_COMPARISON_ROW_DIF +DBA_COMPARISON_SCAN +DBA_COMPARISON_SCAN_VALUES +DBA_CONNECT_ROLE_GRANTEES +DBA_CONS_OBJ_COLUMNS +DBA_CONSTRAINTS +DBA_CONTEXT +DBA_CPOOL_INFO +DBA_CPU_USAGE_STATISTICS +DBA_CQ_NOTIFICATION_QUERIES +DBA_CUBE_ATTR_VISIBILITY +DBA_CUBE_ATTRIBUTES +DBA_CUBE_BUILD_PROCESSES +DBA_CUBE_CALCULATED_MEMBERS +DBA_CUBE_DIM_LEVELS +DBA_CUBE_DIM_MODELS +DBA_CUBE_DIM_VIEW_COLUMNS +DBA_CUBE_DIM_VIEWS +DBA_CUBE_DIMENSIONALITY +DBA_CUBE_DIMENSIONS +DBA_CUBE_HIER_LEVELS +DBA_CUBE_HIER_VIEW_COLUMNS +DBA_CUBE_HIER_VIEWS +DBA_CUBE_HIERARCHIES +DBA_CUBE_MEASURES +DBA_CUBE_VIEW_COLUMNS +DBA_CUBE_VIEWS +DBA_CUBES +DBA_DATA_FILES +DBA_DATAPUMP_JOBS +DBA_DATAPUMP_SESSIONS +DBA_DB_LINKS +DBA_DDL_LOCKS +DBA_DEPENDENCIES +DBA_DIM_ATTRIBUTES +DBA_DIM_CHILD_OF +DBA_DIM_HIERARCHIES +DBA_DIM_JOIN_KEY +DBA_DIM_LEVEL_KEY +DBA_DIM_LEVELS +DBA_DIMENSIONS +DBA_DIRECTORIES +DBA_DML_LOCKS +DBA_DMT_FREE_SPACE +DBA_DMT_USED_EXTENTS +DBA_EDITION_COMMENTS +DBA_EDITIONING_VIEW_COLS +DBA_EDITIONING_VIEW_COLS_AE +DBA_EDITIONING_VIEWS +DBA_EDITIONING_VIEWS_AE +DBA_EDITIONS +DBA_ENABLED_AGGREGATIONS +DBA_ENABLED_TRACES +DBA_ENCRYPTED_COLUMNS +DBA_EPG_DAD_AUTHORIZATION +DBA_ERRORS +DBA_ERRORS_AE +DBA_EVALUATION_CONTEXT_TABLES +DBA_EVALUATION_CONTEXT_VARS +DBA_EVALUATION_CONTEXTS +DBA_EXP_FILES +DBA_EXP_OBJECTS +DBA_EXP_VERSION +DBA_EXTENTS +DBA_EXTERNAL_LOCATIONS +DBA_EXTERNAL_TABLES +DBA_FEATURE_USAGE_STATISTICS +DBA_FGA_AUDIT_TRAIL +DBA_FILE_GROUP_EXPORT_INFO +DBA_FILE_GROUP_FILES +DBA_FILE_GROUP_TABLES +DBA_FILE_GROUP_TABLESPACES +DBA_FILE_GROUP_VERSIONS +DBA_FILE_GROUPS +DBA_FLASHBACK_ARCHIVE +DBA_FLASHBACK_ARCHIVE_TABLES +DBA_FLASHBACK_ARCHIVE_TS +DBA_FLASHBACK_TXN_REPORT +DBA_FLASHBACK_TXN_STATE +DBA_FREE_SPACE +DBA_FREE_SPACE_COALESCED +DBA_HIGH_WATER_MARK_STATISTICS +DBA_HIST_ACTIVE_SESS_HISTORY +DBA_HIST_BASELINE +DBA_HIST_BASELINE_DETAILS +DBA_HIST_BASELINE_METADATA +DBA_HIST_BASELINE_TEMPLATE +DBA_HIST_BG_EVENT_SUMMARY +DBA_HIST_BUFFER_POOL_STAT +DBA_HIST_BUFFERED_QUEUES +DBA_HIST_BUFFERED_SUBSCRIBERS +DBA_HIST_CLUSTER_INTERCON +DBA_HIST_COLORED_SQL +DBA_HIST_COMP_IOSTAT +DBA_HIST_CR_BLOCK_SERVER +DBA_HIST_CURRENT_BLOCK_SERVER +DBA_HIST_DATABASE_INSTANCE +DBA_HIST_DATAFILE +DBA_HIST_DB_CACHE_ADVICE +DBA_HIST_DISPATCHER +DBA_HIST_DLM_MISC +DBA_HIST_DYN_REMASTER_STATS +DBA_HIST_ENQUEUE_STAT +DBA_HIST_EVENT_HISTOGRAM +DBA_HIST_EVENT_NAME +DBA_HIST_FILEMETRIC_HISTORY +DBA_HIST_FILESTATXS +DBA_HIST_IC_CLIENT_STATS +DBA_HIST_IC_DEVICE_STATS +DBA_HIST_INST_CACHE_TRANSFER +DBA_HIST_INSTANCE_RECOVERY +DBA_HIST_INTERCONNECT_PINGS +DBA_HIST_IOSTAT_DETAIL +DBA_HIST_IOSTAT_FILETYPE +DBA_HIST_IOSTAT_FILETYPE_NAME +DBA_HIST_IOSTAT_FUNCTION +DBA_HIST_IOSTAT_FUNCTION_NAME +DBA_HIST_JAVA_POOL_ADVICE +DBA_HIST_LATCH +DBA_HIST_LATCH_CHILDREN +DBA_HIST_LATCH_MISSES_SUMMARY +DBA_HIST_LATCH_NAME +DBA_HIST_LATCH_PARENT +DBA_HIST_LIBRARYCACHE +DBA_HIST_LOG +DBA_HIST_MEM_DYNAMIC_COMP +DBA_HIST_MEMORY_RESIZE_OPS +DBA_HIST_MEMORY_TARGET_ADVICE +DBA_HIST_METRIC_NAME +DBA_HIST_MTTR_TARGET_ADVICE +DBA_HIST_MUTEX_SLEEP +DBA_HIST_OPTIMIZER_ENV +DBA_HIST_OSSTAT +DBA_HIST_OSSTAT_NAME +DBA_HIST_PARAMETER +DBA_HIST_PARAMETER_NAME +DBA_HIST_PERSISTENT_QMN_CACHE +DBA_HIST_PERSISTENT_QUEUES +DBA_HIST_PERSISTENT_SUBS +DBA_HIST_PGA_TARGET_ADVICE +DBA_HIST_PGASTAT +DBA_HIST_PLAN_OPERATION_NAME +DBA_HIST_PLAN_OPTION_NAME +DBA_HIST_PROCESS_MEM_SUMMARY +DBA_HIST_RESOURCE_LIMIT +DBA_HIST_ROWCACHE_SUMMARY +DBA_HIST_RSRC_CONSUMER_GROUP +DBA_HIST_RSRC_PLAN +DBA_HIST_RULE_SET +DBA_HIST_SEG_STAT +DBA_HIST_SEG_STAT_OBJ +DBA_HIST_SERVICE_NAME +DBA_HIST_SERVICE_STAT +DBA_HIST_SERVICE_WAIT_CLASS +DBA_HIST_SESS_TIME_STATS +DBA_HIST_SESSMETRIC_HISTORY +DBA_HIST_SGA +DBA_HIST_SGA_TARGET_ADVICE +DBA_HIST_SGASTAT +DBA_HIST_SHARED_POOL_ADVICE +DBA_HIST_SHARED_SERVER_SUMMARY +DBA_HIST_SNAP_ERROR +DBA_HIST_SNAPSHOT +DBA_HIST_SQL_BIND_METADATA +DBA_HIST_SQL_PLAN +DBA_HIST_SQL_SUMMARY +DBA_HIST_SQL_WORKAREA_HSTGRM +DBA_HIST_SQLBIND +DBA_HIST_SQLCOMMAND_NAME +DBA_HIST_SQLSTAT +DBA_HIST_SQLTEXT +DBA_HIST_STAT_NAME +DBA_HIST_STREAMS_APPLY_SUM +DBA_HIST_STREAMS_CAPTURE +DBA_HIST_STREAMS_POOL_ADVICE +DBA_HIST_SYS_TIME_MODEL +DBA_HIST_SYSMETRIC_HISTORY +DBA_HIST_SYSMETRIC_SUMMARY +DBA_HIST_SYSSTAT +DBA_HIST_SYSTEM_EVENT +DBA_HIST_TABLESPACE_STAT +DBA_HIST_TBSPC_SPACE_USAGE +DBA_HIST_TEMPFILE +DBA_HIST_TEMPSTATXS +DBA_HIST_THREAD +DBA_HIST_TOPLEVELCALL_NAME +DBA_HIST_UNDOSTAT +DBA_HIST_WAITCLASSMET_HISTORY +DBA_HIST_WAITSTAT +DBA_HIST_WR_CONTROL +DBA_HISTOGRAMS +DBA_IDENTIFIERS +DBA_IND_COLUMNS +DBA_IND_EXPRESSIONS +DBA_IND_PARTITIONS +DBA_IND_PENDING_STATS +DBA_IND_STATISTICS +DBA_IND_SUBPARTITIONS +DBA_INDEXES +DBA_INDEXTYPE_ARRAYTYPES +DBA_INDEXTYPE_COMMENTS +DBA_INDEXTYPE_OPERATORS +DBA_INDEXTYPES +DBA_INTERNAL_TRIGGERS +DBA_JAVA_ARGUMENTS +DBA_JAVA_CLASSES +DBA_JAVA_COMPILER_OPTIONS +DBA_JAVA_DERIVATIONS +DBA_JAVA_FIELDS +DBA_JAVA_IMPLEMENTS +DBA_JAVA_INNERS +DBA_JAVA_LAYOUTS +DBA_JAVA_METHODS +DBA_JAVA_NCOMPS +DBA_JAVA_POLICY +DBA_JAVA_RESOLVERS +DBA_JAVA_THROWS +DBA_JOBS +DBA_JOBS_RUNNING +DBA_JOIN_IND_COLUMNS +DBA_KGLLOCK +DBA_LIBRARIES +DBA_LMT_FREE_SPACE +DBA_LMT_USED_EXTENTS +DBA_LOB_PARTITIONS +DBA_LOB_SUBPARTITIONS +DBA_LOB_TEMPLATES +DBA_LOBS +DBA_LOCK +DBA_LOCK_INTERNAL +DBA_LOCKS +DBA_LOG_GROUP_COLUMNS +DBA_LOG_GROUPS +DBA_LOGMNR_LOG +DBA_LOGMNR_PURGED_LOG +DBA_LOGMNR_SESSION +DBA_LOGSTDBY_EVENTS +DBA_LOGSTDBY_HISTORY +DBA_LOGSTDBY_LOG +DBA_LOGSTDBY_NOT_UNIQUE +DBA_LOGSTDBY_PARAMETERS +DBA_LOGSTDBY_PROGRESS +DBA_LOGSTDBY_SKIP +DBA_LOGSTDBY_SKIP_TRANSACTION +DBA_LOGSTDBY_UNSUPPORTED +DBA_LOGSTDBY_UNSUPPORTED_TABLE +DBA_MEASURE_FOLDER_CONTENTS +DBA_MEASURE_FOLDERS +DBA_METHOD_PARAMS +DBA_METHOD_RESULTS +DBA_MINING_MODEL_ATTRIBUTES +DBA_MINING_MODEL_SETTINGS +DBA_MINING_MODELS +DBA_MVIEW_AGGREGATES +DBA_MVIEW_ANALYSIS +DBA_MVIEW_COMMENTS +DBA_MVIEW_DETAIL_PARTITION +DBA_MVIEW_DETAIL_RELATIONS +DBA_MVIEW_DETAIL_SUBPARTITION +DBA_MVIEW_JOINS +DBA_MVIEW_KEYS +DBA_MVIEW_LOG_FILTER_COLS +DBA_MVIEW_LOGS +DBA_MVIEW_REFRESH_TIMES +DBA_MVIEWS +DBA_NESTED_TABLE_COLS +DBA_NESTED_TABLES +DBA_NETWORK_ACL_PRIVILEGES +DBA_NETWORK_ACLS +DBA_OBJ_AUDIT_OPTS +DBA_OBJ_COLATTRS +DBA_OBJECT_SIZE +DBA_OBJECT_TABLES +DBA_OBJECTS +DBA_OBJECTS_AE +DBA_OPANCILLARY +DBA_OPARGUMENTS +DBA_OPBINDINGS +DBA_OPERATOR_COMMENTS +DBA_OPERATORS +DBA_OPTSTAT_OPERATIONS +DBA_ORPHAN_KEY_TABLE +DBA_OUTLINE_HINTS +DBA_OUTLINES +DBA_OUTSTANDING_ALERTS +DBA_PARALLEL_EXECUTE_CHUNKS +DBA_PARALLEL_EXECUTE_TASKS +DBA_PART_COL_STATISTICS +DBA_PART_HISTOGRAMS +DBA_PART_INDEXES +DBA_PART_KEY_COLUMNS +DBA_PART_LOBS +DBA_PART_TABLES +DBA_PARTIAL_DROP_TABS +DBA_PENDING_CONV_TABLES +DBA_PENDING_TRANSACTIONS +DBA_PLSQL_OBJECT_SETTINGS +DBA_POLICIES +DBA_POLICY_CONTEXTS +DBA_POLICY_GROUPS +DBA_PRIV_AUDIT_OPTS +DBA_PROCEDURES +DBA_PROFILES +DBA_PROPAGATION +DBA_PROXIES +DBA_PUBLISHED_COLUMNS +DBA_QUEUE_SCHEDULES +DBA_QUEUE_SUBSCRIBERS +DBA_QUEUE_TABLES +DBA_QUEUES +DBA_RCHILD +DBA_RECOVERABLE_SCRIPT +DBA_RECOVERABLE_SCRIPT_BLOCKS +DBA_RECOVERABLE_SCRIPT_ERRORS +DBA_RECOVERABLE_SCRIPT_HIST +DBA_RECOVERABLE_SCRIPT_PARAMS +DBA_RECYCLEBIN +DBA_REDEFINITION_ERRORS +DBA_REDEFINITION_OBJECTS +DBA_REFRESH +DBA_REFRESH_CHILDREN +DBA_REFS +DBA_REGISTERED_ARCHIVED_LOG +DBA_REGISTERED_MVIEW_GROUPS +DBA_REGISTERED_MVIEWS +DBA_REGISTRY +DBA_REGISTRY_HIERARCHY +DBA_REGISTRY_HISTORY +DBA_REGISTRY_LOG +DBA_REPAIR_TABLE +DBA_RESOURCE_INCARNATIONS +DBA_RESUMABLE +DBA_REWRITE_EQUIVALENCES +DBA_RGROUP +DBA_ROLE_PRIVS +DBA_ROLES +DBA_ROLLBACK_SEGS +DBA_RSRC_CATEGORIES +DBA_RSRC_CONSUMER_GROUP_PRIVS +DBA_RSRC_CONSUMER_GROUPS +DBA_RSRC_GROUP_MAPPINGS +DBA_RSRC_IO_CALIBRATE +DBA_RSRC_MANAGER_SYSTEM_PRIVS +DBA_RSRC_MAPPING_PRIORITY +DBA_RSRC_PLAN_DIRECTIVES +DBA_RSRC_PLANS +DBA_RULE_SET_RULES +DBA_RULE_SETS +DBA_RULES +DBA_SCHEDULER_CHAIN_RULES +DBA_SCHEDULER_CHAIN_STEPS +DBA_SCHEDULER_CHAINS +DBA_SCHEDULER_CREDENTIALS +DBA_SCHEDULER_DB_DESTS +DBA_SCHEDULER_DESTS +DBA_SCHEDULER_EXTERNAL_DESTS +DBA_SCHEDULER_FILE_WATCHERS +DBA_SCHEDULER_GLOBAL_ATTRIBUTE +DBA_SCHEDULER_GROUP_MEMBERS +DBA_SCHEDULER_GROUPS +DBA_SCHEDULER_JOB_ARGS +DBA_SCHEDULER_JOB_CLASSES +DBA_SCHEDULER_JOB_DESTS +DBA_SCHEDULER_JOB_LOG +DBA_SCHEDULER_JOB_ROLES +DBA_SCHEDULER_JOB_RUN_DETAILS +DBA_SCHEDULER_JOBS +DBA_SCHEDULER_NOTIFICATIONS +DBA_SCHEDULER_PROGRAM_ARGS +DBA_SCHEDULER_PROGRAMS +DBA_SCHEDULER_REMOTE_DATABASES +DBA_SCHEDULER_REMOTE_JOBSTATE +DBA_SCHEDULER_RUNNING_CHAINS +DBA_SCHEDULER_RUNNING_JOBS +DBA_SCHEDULER_SCHEDULES +DBA_SCHEDULER_WINDOW_DETAILS +DBA_SCHEDULER_WINDOW_GROUPS +DBA_SCHEDULER_WINDOW_LOG +DBA_SCHEDULER_WINDOWS +DBA_SCHEDULER_WINGROUP_MEMBERS +DBA_SEC_RELEVANT_COLS +DBA_SECONDARY_OBJECTS +DBA_SEGMENTS +DBA_SEGMENTS_OLD +DBA_SEQUENCES +DBA_SERVER_REGISTRY +DBA_SERVICES +DBA_SOURCE +DBA_SOURCE_AE +DBA_SOURCE_TABLES +DBA_SQL_MANAGEMENT_CONFIG +DBA_SQL_PATCHES +DBA_SQL_PLAN_BASELINES +DBA_SQL_PROFILES +DBA_SQLJ_TYPE_ATTRS +DBA_SQLJ_TYPE_METHODS +DBA_SQLJ_TYPES +DBA_SQLSET +DBA_SQLSET_BINDS +DBA_SQLSET_PLANS +DBA_SQLSET_REFERENCES +DBA_SQLSET_STATEMENTS +DBA_SQLTUNE_BINDS +DBA_SQLTUNE_PLANS +DBA_SQLTUNE_RATIONALE_PLAN +DBA_SQLTUNE_STATISTICS +DBA_SSCR_CAPTURE +DBA_SSCR_RESTORE +DBA_STAT_EXTENSIONS +DBA_STMT_AUDIT_OPTS +DBA_STORED_SETTINGS +DBA_STREAMS_ADD_COLUMN +DBA_STREAMS_ADMINISTRATOR +DBA_STREAMS_COLUMNS +DBA_STREAMS_DELETE_COLUMN +DBA_STREAMS_GLOBAL_RULES +DBA_STREAMS_KEEP_COLUMNS +DBA_STREAMS_MESSAGE_CONSUMERS +DBA_STREAMS_MESSAGE_RULES +DBA_STREAMS_NEWLY_SUPPORTED +DBA_STREAMS_RENAME_COLUMN +DBA_STREAMS_RENAME_SCHEMA +DBA_STREAMS_RENAME_TABLE +DBA_STREAMS_RULES +DBA_STREAMS_SCHEMA_RULES +DBA_STREAMS_SPLIT_MERGE +DBA_STREAMS_SPLIT_MERGE_HIST +DBA_STREAMS_STMT_HANDLERS +DBA_STREAMS_STMTS +DBA_STREAMS_TABLE_RULES +DBA_STREAMS_TP_COMPONENT +DBA_STREAMS_TP_COMPONENT_LINK +DBA_STREAMS_TP_COMPONENT_STAT +DBA_STREAMS_TP_DATABASE +DBA_STREAMS_TP_PATH_BOTTLENECK +DBA_STREAMS_TP_PATH_STAT +DBA_STREAMS_TRANSFORM_FUNCTION +DBA_STREAMS_TRANSFORMATIONS +DBA_STREAMS_UNSUPPORTED +DBA_SUBPART_COL_STATISTICS +DBA_SUBPART_HISTOGRAMS +DBA_SUBPART_KEY_COLUMNS +DBA_SUBPARTITION_TEMPLATES +DBA_SUBSCR_REGISTRATIONS +DBA_SUBSCRIBED_COLUMNS +DBA_SUBSCRIBED_TABLES +DBA_SUBSCRIPTIONS +DBA_SYNC_CAPTURE +DBA_SYNC_CAPTURE_PREPARED_TABS +DBA_SYNC_CAPTURE_TABLES +DBA_SYNONYMS +DBA_SYS_PRIVS +DBA_TAB_COL_STATISTICS +DBA_TAB_COLS +DBA_TAB_COLUMNS +DBA_TAB_COMMENTS +DBA_TAB_HISTGRM_PENDING_STATS +DBA_TAB_HISTOGRAMS +DBA_TAB_MODIFICATIONS +DBA_TAB_PARTITIONS +DBA_TAB_PENDING_STATS +DBA_TAB_PRIVS +DBA_TAB_STATISTICS +DBA_TAB_STAT_PREFS +DBA_TAB_STATS_HISTORY +DBA_TAB_SUBPARTITIONS +DBA_TABLES +DBA_TABLESPACE_GROUPS +DBA_TABLESPACE_THRESHOLDS +DBA_TABLESPACE_USAGE_METRICS +DBA_TABLESPACES +DBA_TEMP_FILES +DBA_TEMP_FREE_SPACE +DBA_THRESHOLDS +DBA_TRANSFORMATIONS +DBA_TRIGGER_COLS +DBA_TRIGGER_ORDERING +DBA_TRIGGERS +DBA_TS_QUOTAS +DBA_TSM_DESTINATION +DBA_TSM_SOURCE +DBA_TSTZ_TAB_COLS +DBA_TSTZ_TABLES +DBA_TUNE_MVIEW +DBA_TYPE_ATTRS +DBA_TYPE_METHODS +DBA_TYPE_VERSIONS +DBA_TYPES +DBA_UNDO_EXTENTS +DBA_UNUSED_COL_TABS +DBA_UPDATABLE_COLUMNS +DBA_USERS +DBA_USERS_WITH_DEFPWD +DBA_USTATS +DBA_VARRAYS +DBA_VIEWS +DBA_VIEWS_AE +DBA_WAITERS +DBA_WALLET_ACLS +DBA_WARNING_SETTINGS +DBA_WORKLOAD_CAPTURES +DBA_WORKLOAD_CONNECTION_MAP +DBA_WORKLOAD_FILTERS +DBA_WORKLOAD_REPLAY_DIVERGENCE +DBA_WORKLOAD_REPLAYS +DBA_XML_INDEXES +DBA_XML_SCHEMAS +DBA_XML_TAB_COLS +DBA_XML_TABLES +DBA_XML_VIEW_COLS +DBA_XML_VIEWS +DBA_XSTREAM_ADMINISTRATOR +DBA_XSTREAM_INBOUND +DBA_XSTREAM_INBOUND_PROGRESS +DBA_XSTREAM_OUT_SUPPORT_MODE +DBA_XSTREAM_OUTBOUND +DBA_XSTREAM_OUTBOUND_PROGRESS +DBA_XSTREAM_RULES +DBFS_CONTENT +DBFS_CONTENT_PROPERTIES +DBMS_ALERT_INFO +DBMS_LOCK_ALLOCATED +DEPTREE +DICT +DICT_COLUMNS +DICTIONARY +DM_USER_MODELS +DOCUMENT_LINKS +ERROR_SIZE +EXCEPTIONS +FLASHBACK_TRANSACTION_QUERY +GLOBAL_NAME +HS_ALL_CAPS +HS_ALL_DD +HS_ALL_INITS +HS_BASE_CAPS +HS_BASE_DD +HS_CLASS_CAPS +HS_CLASS_DD +HS_CLASS_INIT +HS_FDS_CLASS +HS_FDS_INST +HS_INST_CAPS +HS_INST_DD +HS_INST_INIT +IDEPTREE +IND +INDEX_HISTOGRAM +INDEX_STATS +LOGSTDBY_UNSUPPORTED_TABLES +MAP_OBJECT +NLS_DATABASE_PARAMETERS +NLS_INSTANCE_PARAMETERS +NLS_SESSION_PARAMETERS +OBJ +PATH_VIEW +PLAN_TABLE +PLUGGABLE_SET_CHECK +PRODUCT_COMPONENT_VERSION +PROXY_USERS +PSTUBTBL +PUBLIC_DEPENDENCY +PUBLICSYN +QUEUE_PRIVILEGES +RECYCLEBIN +REPORT_COMPONENTS +REPORT_FILES +REPORT_FORMATS +RESOURCE_COST +RESOURCE_MAP +RESOURCE_VIEW +ROLE_ROLE_PRIVS +ROLE_SYS_PRIVS +ROLE_TAB_PRIVS +SCHEDULER_BATCH_ERRORS +SEQ +SESSION_CONTEXT +SESSION_PRIVS +SESSION_ROLES +SOURCE_SIZE +STMT_AUDIT_OPTION_MAP +SYN +SYNONYMS +SYS_OBJECTS +SYSCATALOG +SYSFILES +SYSSEGOBJ +SYSTEM_PRIVILEGE_MAP +TAB +TABLE_PRIVILEGE_MAP +TABQUOTAS +TABS +TRUSTED_SERVERS +TS_PITR_CHECK +TS_PITR_OBJECTS_TO_BE_DROPPED +UNI_PLUGGABLE_SET_CHECK +USER_ADDM_FDG_BREAKDOWN +USER_ADDM_FINDINGS +USER_ADDM_INSTANCES +USER_ADDM_TASKS +USER_ADVISOR_ACTIONS +USER_ADVISOR_DIR_TASK_INST +USER_ADVISOR_EXEC_PARAMETERS +USER_ADVISOR_EXECUTIONS +USER_ADVISOR_FDG_BREAKDOWN +USER_ADVISOR_FINDINGS +USER_ADVISOR_JOURNAL +USER_ADVISOR_LOG +USER_ADVISOR_OBJECTS +USER_ADVISOR_PARAMETERS +USER_ADVISOR_RATIONALE +USER_ADVISOR_RECOMMENDATIONS +USER_ADVISOR_SQLA_REC_SUM +USER_ADVISOR_SQLA_TABLES +USER_ADVISOR_SQLA_WK_MAP +USER_ADVISOR_SQLA_WK_STMTS +USER_ADVISOR_SQLPLANS +USER_ADVISOR_SQLSTATS +USER_ADVISOR_SQLW_JOURNAL +USER_ADVISOR_SQLW_PARAMETERS +USER_ADVISOR_SQLW_STMTS +USER_ADVISOR_SQLW_SUM +USER_ADVISOR_SQLW_TABLES +USER_ADVISOR_SQLW_TEMPLATES +USER_ADVISOR_TASKS +USER_ADVISOR_TEMPLATES +USER_ALL_TABLES +USER_AQ_AGENT_PRIVS +USER_ARGUMENTS +USER_ASSEMBLIES +USER_ASSOCIATIONS +USER_ATTRIBUTE_TRANSFORMATIONS +USER_AUDIT_OBJECT +USER_AUDIT_POLICIES +USER_AUDIT_POLICY_COLUMNS +USER_AUDIT_SESSION +USER_AUDIT_STATEMENT +USER_AUDIT_TRAIL +USER_AW_PS +USER_AWS +USER_BASE_TABLE_MVIEWS +USER_CATALOG +USER_CHANGE_NOTIFICATION_REGS +USER_CLU_COLUMNS +USER_CLUSTER_HASH_EXPRESSIONS +USER_CLUSTERS +USER_COL_COMMENTS +USER_COL_PENDING_STATS +USER_COL_PRIVS +USER_COL_PRIVS_MADE +USER_COL_PRIVS_RECD +USER_COLL_TYPES +USER_COMPARISON +USER_COMPARISON_COLUMNS +USER_COMPARISON_ROW_DIF +USER_COMPARISON_SCAN +USER_COMPARISON_SCAN_VALUES +USER_CONS_COLUMNS +USER_CONS_OBJ_COLUMNS +USER_CONSTRAINTS +USER_CQ_NOTIFICATION_QUERIES +USER_CUBE_ATTR_VISIBILITY +USER_CUBE_ATTRIBUTES +USER_CUBE_BUILD_PROCESSES +USER_CUBE_CALCULATED_MEMBERS +USER_CUBE_DIM_LEVELS +USER_CUBE_DIM_MODELS +USER_CUBE_DIM_VIEW_COLUMNS +USER_CUBE_DIM_VIEWS +USER_CUBE_DIMENSIONALITY +USER_CUBE_DIMENSIONS +USER_CUBE_HIER_LEVELS +USER_CUBE_HIER_VIEW_COLUMNS +USER_CUBE_HIER_VIEWS +USER_CUBE_HIERARCHIES +USER_CUBE_MEASURES +USER_CUBE_VIEW_COLUMNS +USER_CUBE_VIEWS +USER_CUBES +USER_DATAPUMP_JOBS +USER_DB_LINKS +USER_DBFS_HS_FILES +USER_DEPENDENCIES +USER_DIM_ATTRIBUTES +USER_DIM_CHILD_OF +USER_DIM_HIERARCHIES +USER_DIM_JOIN_KEY +USER_DIM_LEVEL_KEY +USER_DIM_LEVELS +USER_DIMENSIONS +USER_EDITIONING_VIEW_COLS +USER_EDITIONING_VIEW_COLS_AE +USER_EDITIONING_VIEWS +USER_EDITIONING_VIEWS_AE +USER_ENCRYPTED_COLUMNS +USER_EPG_DAD_AUTHORIZATION +USER_ERRORS +USER_ERRORS_AE +USER_EVALUATION_CONTEXT_TABLES +USER_EVALUATION_CONTEXT_VARS +USER_EVALUATION_CONTEXTS +USER_EXTENTS +USER_EXTERNAL_LOCATIONS +USER_EXTERNAL_TABLES +USER_FILE_GROUP_EXPORT_INFO +USER_FILE_GROUP_FILES +USER_FILE_GROUP_TABLES +USER_FILE_GROUP_TABLESPACES +USER_FILE_GROUP_VERSIONS +USER_FILE_GROUPS +USER_FLASHBACK_ARCHIVE +USER_FLASHBACK_ARCHIVE_TABLES +USER_FLASHBACK_TXN_REPORT +USER_FLASHBACK_TXN_STATE +USER_FREE_SPACE +USER_HISTOGRAMS +USER_IDENTIFIERS +USER_IND_COLUMNS +USER_IND_EXPRESSIONS +USER_IND_PARTITIONS +USER_IND_PENDING_STATS +USER_IND_STATISTICS +USER_IND_SUBPARTITIONS +USER_INDEXES +USER_INDEXTYPE_ARRAYTYPES +USER_INDEXTYPE_COMMENTS +USER_INDEXTYPE_OPERATORS +USER_INDEXTYPES +USER_INTERNAL_TRIGGERS +USER_JAVA_ARGUMENTS +USER_JAVA_CLASSES +USER_JAVA_COMPILER_OPTIONS +USER_JAVA_DERIVATIONS +USER_JAVA_FIELDS +USER_JAVA_IMPLEMENTS +USER_JAVA_INNERS +USER_JAVA_LAYOUTS +USER_JAVA_METHODS +USER_JAVA_NCOMPS +USER_JAVA_POLICY +USER_JAVA_RESOLVERS +USER_JAVA_THROWS +USER_JOBS +USER_JOIN_IND_COLUMNS +USER_LIBRARIES +USER_LOB_PARTITIONS +USER_LOB_SUBPARTITIONS +USER_LOB_TEMPLATES +USER_LOBS +USER_LOG_GROUP_COLUMNS +USER_LOG_GROUPS +USER_MEASURE_FOLDER_CONTENTS +USER_MEASURE_FOLDERS +USER_METHOD_PARAMS +USER_METHOD_RESULTS +USER_MINING_MODEL_ATTRIBUTES +USER_MINING_MODEL_SETTINGS +USER_MINING_MODELS +USER_MVIEW_AGGREGATES +USER_MVIEW_ANALYSIS +USER_MVIEW_COMMENTS +USER_MVIEW_DETAIL_PARTITION +USER_MVIEW_DETAIL_RELATIONS +USER_MVIEW_DETAIL_SUBPARTITION +USER_MVIEW_JOINS +USER_MVIEW_KEYS +USER_MVIEW_LOGS +USER_MVIEW_REFRESH_TIMES +USER_MVIEWS +USER_NESTED_TABLE_COLS +USER_NESTED_TABLES +USER_NETWORK_ACL_PRIVILEGES +USER_OBJ_AUDIT_OPTS +USER_OBJ_COLATTRS +USER_OBJECT_SIZE +USER_OBJECT_TABLES +USER_OBJECTS +USER_OBJECTS_AE +USER_OPANCILLARY +USER_OPARGUMENTS +USER_OPBINDINGS +USER_OPERATOR_COMMENTS +USER_OPERATORS +USER_OUTLINE_HINTS +USER_OUTLINES +USER_PARALLEL_EXECUTE_CHUNKS +USER_PARALLEL_EXECUTE_TASKS +USER_PART_COL_STATISTICS +USER_PART_HISTOGRAMS +USER_PART_INDEXES +USER_PART_KEY_COLUMNS +USER_PART_LOBS +USER_PART_TABLES +USER_PARTIAL_DROP_TABS +USER_PASSWORD_LIMITS +USER_PENDING_CONV_TABLES +USER_PLSQL_OBJECT_SETTINGS +USER_POLICIES +USER_POLICY_CONTEXTS +USER_POLICY_GROUPS +USER_PROCEDURES +USER_PROXIES +USER_PUBLISHED_COLUMNS +USER_QUEUE_SCHEDULES +USER_QUEUE_SUBSCRIBERS +USER_QUEUE_TABLES +USER_QUEUES +USER_RECYCLEBIN +USER_REFRESH +USER_REFRESH_CHILDREN +USER_REFS +USER_REGISTERED_MVIEWS +USER_REGISTRY +USER_RESOURCE_LIMITS +USER_RESUMABLE +USER_REWRITE_EQUIVALENCES +USER_ROLE_PRIVS +USER_RSRC_CONSUMER_GROUP_PRIVS +USER_RSRC_MANAGER_SYSTEM_PRIVS +USER_RULE_SET_RULES +USER_RULE_SETS +USER_RULES +USER_SCHEDULER_CHAIN_RULES +USER_SCHEDULER_CHAIN_STEPS +USER_SCHEDULER_CHAINS +USER_SCHEDULER_CREDENTIALS +USER_SCHEDULER_DB_DESTS +USER_SCHEDULER_DESTS +USER_SCHEDULER_FILE_WATCHERS +USER_SCHEDULER_GROUP_MEMBERS +USER_SCHEDULER_GROUPS +USER_SCHEDULER_JOB_ARGS +USER_SCHEDULER_JOB_DESTS +USER_SCHEDULER_JOB_LOG +USER_SCHEDULER_JOB_RUN_DETAILS +USER_SCHEDULER_JOBS +USER_SCHEDULER_NOTIFICATIONS +USER_SCHEDULER_PROGRAM_ARGS +USER_SCHEDULER_PROGRAMS +USER_SCHEDULER_REMOTE_JOBSTATE +USER_SCHEDULER_RUNNING_CHAINS +USER_SCHEDULER_RUNNING_JOBS +USER_SCHEDULER_SCHEDULES +USER_SEC_RELEVANT_COLS +USER_SECONDARY_OBJECTS +USER_SEGMENTS +USER_SEQUENCES +USER_SOURCE +USER_SOURCE_AE +USER_SOURCE_TABLES +USER_SQLJ_TYPE_ATTRS +USER_SQLJ_TYPE_METHODS +USER_SQLJ_TYPES +USER_SQLSET +USER_SQLSET_BINDS +USER_SQLSET_PLANS +USER_SQLSET_REFERENCES +USER_SQLSET_STATEMENTS +USER_SQLTUNE_BINDS +USER_SQLTUNE_PLANS +USER_SQLTUNE_RATIONALE_PLAN +USER_SQLTUNE_STATISTICS +USER_STAT_EXTENSIONS +USER_STORED_SETTINGS +USER_SUBPART_COL_STATISTICS +USER_SUBPART_HISTOGRAMS +USER_SUBPART_KEY_COLUMNS +USER_SUBPARTITION_TEMPLATES +USER_SUBSCR_REGISTRATIONS +USER_SUBSCRIBED_COLUMNS +USER_SUBSCRIBED_TABLES +USER_SUBSCRIPTIONS +USER_SYNONYMS +USER_SYS_PRIVS +USER_TAB_COL_STATISTICS +USER_TAB_COLS +USER_TAB_COLUMNS +USER_TAB_COMMENTS +USER_TAB_HISTGRM_PENDING_STATS +USER_TAB_HISTOGRAMS +USER_TAB_MODIFICATIONS +USER_TAB_PARTITIONS +USER_TAB_PENDING_STATS +USER_TAB_PRIVS +USER_TAB_PRIVS_MADE +USER_TAB_PRIVS_RECD +USER_TAB_STAT_PREFS +USER_TAB_STATISTICS +USER_TAB_STATS_HISTORY +USER_TAB_SUBPARTITIONS +USER_TABLES +USER_TABLESPACES +USER_TRANSFORMATIONS +USER_TRIGGER_COLS +USER_TRIGGER_ORDERING +USER_TRIGGERS +USER_TS_QUOTAS +USER_TSTZ_TAB_COLS +USER_TSTZ_TABLES +USER_TUNE_MVIEW +USER_TYPE_ATTRS +USER_TYPE_METHODS +USER_TYPE_VERSIONS +USER_TYPES +USER_UNUSED_COL_TABS +USER_UPDATABLE_COLUMNS +USER_USERS +USER_USTATS +USER_VARRAYS +USER_VIEWS +USER_VIEWS_AE +USER_WARNING_SETTINGS +USER_XML_INDEXES +USER_XML_SCHEMAS +USER_XML_TAB_COLS +USER_XML_TABLES +USER_XML_VIEW_COLS +USER_XML_VIEWS +XS_SESSION_ROLES \ No newline at end of file diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest.java new file mode 100644 index 0000000000..f19c68ab73 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest.java @@ -0,0 +1,16 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.filter.wall.WallUtils; + +public class OracleWallTest extends TestCase { + + public void testWall() throws Exception { + Assert.assertFalse(WallUtils.isValidateOracle("select f1, f2 from t union select 1, 2")); + + Assert.assertFalse(WallUtils.isValidateOracle("select * from TAB")); + } +} diff --git a/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java b/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java index cc6f845a88..23e858cf73 100644 --- a/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java +++ b/src/test/java/com/alibaba/druid/sql/OnlineOracleTest3.java @@ -33,7 +33,7 @@ public class OnlineOracleTest3 extends TestCase { } public void test_connect() throws Exception { - execute("select * from session_roles"); + executeQuery("select * from TAB"); } public void executeQuery(String sql) throws SQLException {