获取单个用户的表和同义词需要哪个权限

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

我无法找出获取单个用户的表和同义词所需的权限。我正在获取相应用户的表或同义词。我为用户提供了获取表数据和同义词数据的选择权限。有人可以帮我吗?

baoyu425 回答:获取单个用户的表和同义词需要哪个权限

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

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

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

本文链接:https://www.f2er.com/9893.html

大家都在问