首页 > 解决方案 > 以普通用户身份连接而不授予权限时在 Oracle 数据库中收集 dba_users 信息

问题描述

我想查询 DBA_USERs 以识别系统和非系统用户/模式。但是,我的客户端应用程序无法以 SYS 用户身份连接,因此我无法直接查询 dba_users。我无法向答案中提到的用户授予权限 -> 在以用户身份 连接时在 Oracle 数据库中收集 dba_users 信息,因为这是一个安全漏洞。

进一步调查,我发现 all_users 包含与 dba_users 相同的数据,但是没有更少。列(以及更少的细节)。

所以使用这个,我想出了以下查询 -

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)指出我可能丢失的任何潜在问题或数据。提前致谢。

标签: databaseoracleprivileges

解决方案


您的问题假设您可以访问数据库中您未被授予访问权限的信息。

数据库设置为针对此类情况是安全的。

至于你的“黑客”——

这是完整的吗?

不会。您的查询不会抓取任何有效用作登录帐户的模式。也就是说,为空的模式。这些用户存在,但他们在 _TABLES 视图中没有任何行。

此外,如果您想走这条路,您应该使用 DBA_OBJECTS 视图。您的架构可以拥有一个视图,但不能拥有一个表。而且,如果您查询 ALL_ 视图,您将只能看到您有权限查看的数据字典。

一天结束 - 你需要一些 DBA_view 的爱。你是DBA吗?如果是这样,请将选择授予您的应用用户并锁定该用户,使其不能用于坏事。

如果您不是 dba,请向您的 DBA 寻求解决方案。


推荐阅读