With the O7_DICTIONARY_ACCESSIBILITY初始化参数设置为 false https://docs.oracle.com/database/121/DBSEG/authorization.htm#GUID-5E99543D-BEB5-45C7-B3F1-5C7795AE2622,这是默认值,那么:
提供对其他模式中的对象的访问的系统权限并不授予其他用户访问该模式中的对象的权限。SYS
架构。例如,SELECT ANY TABLE 权限允许用户访问其他架构中的视图和表,但不允许他们选择字典对象(动态性能视图、常规视图、包和同义词的基表)。但是,您可以授予这些用户显式对象权限以访问SYS
schema.
因此,您可以授予您所需的特定视图的选择权限:
grant select on sys.dba_objects to johnsmith;
其他视图也是如此;或者如果你需要他们对 SYS 模式对象的更广泛访问 https://docs.oracle.com/database/121/DBSEG/authorization.htm#GUID-F4BE7D94-B60E-42CE-9AFA-2D0C0443C31F你可以给他们一个角色:
grant select_catalog_role to johnsmith;
虽然最小特权原则 https://en.wikipedia.org/wiki/Principle_of_least_privilege应始终适用,因此这可能有点过分,并且可能会暴露您不希望用户看到的内容。
您无需授予用户任何权限即可查询user_*
意见。如果您指的是 DBA 等价物 - 例如dba_tables
- 然后授予他们dba_objects
多于;或者他们会被包含在select_catalog_role
。但同样,只提供实际需要的东西。
无论哪种方式,为了dbms_metadata
您也可以只授予该包的权限(您不能授予包中单个过程的权限):
grant execute on dbms_metadata to johnsmith;
或者 - 可能比实际需要的要多得多,并且可能比选择角色更危险:
grant execute_catalog_role to johnsmith