头几天写了个存储过程,用来完成一个系统的数据每天把增量数据同步到另一个系统中。其中用到了select * from v$transaction,创建并执行存储过程的用户授予的是dba角色,但是编译存储过程时总是报ora-00942的错误,说找不到表或视图,但是我在命令行下执行相同的SQL却可以得到结果,让我百思不得其解。
后来在网上查了一下,发现原来dba角色并不是万能权限的角色,在存储过程中查询动态性能视图或数据字典表时需要另外授予查询权限。比如说我这种情况,就需要sysdba使用grant select on v_$transaction to nini来把对v$transaction的查询权限授予给在创建执行存储过程的这个用户。授权以后再编译存储过程,一切OK!
另外,还可以通过grant select on any dictionary to nini来把查看所有动态性能视图和数据字典视图的权限赋给用户,不过这样做从安全的角度考虑就有点欠妥了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12125877/viewspace-465945/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12125877/viewspace-465945/