我有 2 个用户(user1 和 user2)。 user1 有 1 个表(即 PRODUCT),user2 有 1 个同义词(即 PRODUCT)。同义词 (PRODUCT) 是由所有者 USER2 创建的。此同义词是在表(即 PRODUCT)之上创建的,表所有者为 USER1。
表创建语句:
CREATE TABLE "USER1"."PRODUCT" ( "NAME" VARCHAR2(30)) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT flaSH_CACHE DEFAULT CELL_flaSH_CACHE DEFAULT)
TABLESPACE "ABC" ;
同义词创建声明:
CREATE OR REPLACE SYNONYM "USER2"."PRODUCT" FOR "USER1"."PRODUCT";
运行下面的代码时,需要哪个权限来获取单个用户的表和同义词?
Connection con = null;
Statement statement = null;
String driverClass = "oracle.jdbc.OracleDriver";
String host = System.getProperty("host");
String port = System.getProperty("port");
String sid = System.getProperty("sid");
String url = "jdbc:tibcosoftware:oracle://"+host+":"+port+";SID="+sid;
String user = System.getProperty("username");
String password = System.getProperty("password");
try {
Class.forName(driverClass);
con = DriverManager.getconnection(url,user,password);
if (con != null) {
System.out.println("Connection created!");
DatabaseMetaData databaseMetaData = con.getMetaData();
// Retrieving the tables
System.out.println(":::::list of tables:::::");
ResultSet tablesRS = databaseMetaData.getTables(null,user.toUpperCase(),null,null);
while (tablesRS.next()) {
System.out.println(tablesRS.getString(2) + " : " + tablesRS.getString(3) );
}
} else {
System.out.println("Connection does not created!");
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (statement != null)
statement.close();
if (con != null)
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
我无法找出获取单个用户的表和同义词所需的权限。我正在获取相应用户的表或同义词。我为用户提供了获取表数据和同义词数据的选择权限。有人可以帮我吗?