pl/sql函数(过程)中执行dbms_sql的权限问题之二

对于dbms_sql的执行权限问题之一中的两个问题:
1.到底是需要什么权限才能执行函数(过程)中的dbms_sql呢?
2.在利用JDBC连接Oracle时使用的用户名为system登录时有没有sysdba的权限呢?

首先2在《 JDBC以sysdba身份连接oracle9i?》中已经解决:JDBC thin连接时使用system只能是以normal登录,不能作为sysdba登录。

再看1,到底是什么权限才能在函数或过程执行dbms_sql呢?
在Oracle Enterprise Manager Console中以sys登录可以看到system虽然有DBA角色,但是其被显示授予的系统权限只有UNLIMITED TABLESPACE.在该界面中增加授权create any view或者在sql*plus中sys登录使用如下语句
SQL> grant create any view to system;
再执行
    CallableStatement cs;
     try {
      cs = con.prepareCall( "{?=call system.fun_create_join_view(?,?,?)}");
      cs.registerOutParameter(1, Types.VARCHAR);
      cs.setString(2, viewName);
      cs.setString(3, name1);
      cs.setString(4, name2);
      cs.execute();
    } catch (SQLException e) {
       // TODO Auto-generated catch block
      e.printStackTrace();
    }
成功! 可见需要根据dbms_sql中调用的sql语句相应地显示授权给user才能执行。

你可能感兴趣的:(数据库,权限,DBMS_SQL,休闲,pl/sql函数)