获得单个用户的 table 和同义词需要哪个权限

Which privilege is required to get both table and synonym for a single user

我有 2 个用户(用户 1 和用户 2)。 user1 有 1 个 table(即 PRODUCT),user2 有 1 个同义词(即 PRODUCT)。同义词 (PRODUCT) 由所有者 USER2 创建。此同义词是在 table 之上创建的,即 PRODUCT,table 所有者是 USER1。

table 创建声明:

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";

在代码下方 运行 时,需要哪个权限才能同时获得 table 和单个用户的同义词?

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();
    }
}

我无法找出获得单个用户的 table 和同义词需要哪个权限。我得到相应用户的 table 或同义词。我为用户授予了 select 权限以获取 table 数据和同义词数据。谁能帮帮我?

getTables call 的第二个参数指定您要将结果过滤到 user.toUpperCase() 架构中的对象。

    ResultSet tablesRS = databaseMetaData.getTables(null, user.toUpperCase(), null, null);

由于对象位于两个不同的架构中,因此您永远不会同时获得这两个架构。您可以为第二个参数传入 null 值,以便不按模式名称过滤对象。或者您可以传入包含两个模式名称的模式。