我想查询DBA_USERs,以便识别sys和非sys用户/模式。但是,我的客户端应用程序不能以SYS用户身份连接,因此我不能直接查询dba_users。我不能像answer -> gather dba_users information in Oracle database when connected as a user中提到的那样授予用户特权,因为这是一个安全缺陷。
进一步研究,我发现all_users包含与dba_users相同的数据,但no更少。列的数量(以及更少的细节)。
因此,使用这个,我提出了以下查询-
SELECT distinct owner
FROM all_tables
where owner IN (SELECT username FROM all_users)
and tablespace_name not in ('SYSTEM','SYSAUX')我能够以普通用户或非sys用户的身份运行此查询。
这是完整的吗?我想继续在我的生产代码中使用这个查询。通过使用这个查询(使用all_users而不是dba_users),有人能指出我可能遗漏的任何潜在问题或数据吗?提前谢谢。
发布于 2019-03-12 20:20:34
您的问题假设您可以访问数据库中您未被授予访问权限的信息。
数据库设置为针对此类情况提供安全保护。
至于你的“黑客”-
这是完整的吗?
不是的。您的查询不会获取任何有效用作Log On accounts的模式。也就是说,模式是空的。这些用户是存在的,但是他们在_TABLES视图中不会有任何行。
另外,如果你想走那条路,你应该使用DBA_OBJECTS视图。您的架构可以拥有一个视图,但不能拥有一个表。而且,如果查询ALL_视图,则只能看到拥有privs权限的数据字典。
一天结束-你需要一些DBA_视图的爱。您是DBA吗?如果是这样的话,将select授予您的应用程序用户并锁定该用户,这样它就不会被用来做坏事。
如果您不是dba,请向您的DBA寻求解决方案。
https://stackoverflow.com/questions/55120511
复制相似问题