我是Oracle数据库的新手。我看到如果我以sys
用户身份连接,我可以
select * from dba_users;
但是一旦我完成conn nonsys@dbid
,我就再也不能这样做了;我会收到一个错误说
ORA-00942: table or view does not exist
select * from sys.dba_users;
也无效。
请您解释一下为什么会这样,以及在作为非sys用户连接后我如何做select * from dba_users;
?
此外,disconnect
让我完全脱节;是否可以只退出当前用户并返回到sqlplus中的sys
,如果是,该怎么做?
答案 0 :(得分:5)
Oracle中的DBA_ *视图包含有关数据库中所有对象的信息,而不管所有权如何。默认情况下,只有管理帐户才能访问这些视图。这是出于安全原因。为了拥有一个正常的"如果用户获得对这些视图的访问权限,则必须直接在每个视图的基础上授予他们访问权限,或者通过SELECT ANY TABLE(不推荐)等系统权限全局访问这些视图。最好授予用户真正需要的实际DBA_视图的访问权限。通常,ALL_视图将为典型用户提供他们所需的所有信息。
要退出当前用户会话并以其他用户身份连接,请使用CONNECT命令:
CONNECT sys/pw as sysdba
编辑:
对象的所有者可以通过GRANT command:
向其他用户或角色授予对任何对象的访问权限GRANT SELECT ON dba_users TO nonsys;
作为用户SYS执行,这将授予对用户nonsys的dba_users视图的select访问权。
执行授权后,用户nonsys将能够通过SELECT语句从该视图中进行选择:
SELECT * FROM dba_users;