我假设它可以完成,我只是不知道如何或者未能找到办法。
在Oracle中,可以撤销对ALL_ *表和USER_ *表的访问,包括选择授权。
例如,all_objects,all_procedures视图。可以访问这些限制吗?
user_tables和user_procedures以及任何其他user_ *视图也是如此。可以限制访问它们吗?
答案 0 :(得分:2)
不,您不能(合理地)阻止用户查询ALL_*
或USER_*
次观看。您可以通过PUBLIC
单独撤销对这些视图中每一个视图的访问权限,但这将是一个相当痛苦的努力,它会导致各种应用程序崩溃,更不用说破坏Oracle的脚本了。您最终会最终重新授予对连接到数据库的任何帐户的访问权限,因为每个数据库API都会询问数据字典视图。无论您是ODBC应用程序,JDBC应用程序,PLAD或SQL Developer等PL / SQL IDE,还是其他任何东西,这些应用程序都需要查询数据字典。
但是,他们将在任一视图中看到的数据将仅限于他们有权访问的对象(对于ALL_*
视图)或他们拥有的对象(对于USER_*
视图)。通过限制用户查询数据字典以确定用户拥有哪些对象或用户有权访问哪些对象,可以达到什么目的?想让用户拥有一个表但是不允许用户知道他拥有该表似乎是非常奇怪的。
现在,如果确定确实,您可以在名为ALL_TABLES
或USER_TABLES
的用户架构(表格或视图)中创建对象。假设用户只是查询ALL_TABLES
而不是指定完全限定的SYS.ALL_TABLES
,他们将查询本地对象而不是数据字典视图。这通常是一个非常不明智的事情 - 许多产品通过查询数据字典来工作,因此导致数据字典查询返回错误的数据集可能导致各种非常难以追踪的错误。但是,如果您真的想要限制从数据字典返回的数据,那么这是一个选项。