首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问sys.dba_systems需要授予哪些权限

访问sys.dba_systems需要授予哪些权限
EN

Stack Overflow用户
提问于 2017-06-14 13:04:12
回答 1查看 12.7K关注 0票数 2

我正在开发在Oracle上工作的应用程序。对于某种逻辑,我需要使用指定的模式从给定的db用户获取表列表。在我的例子中,我有一个用户已经授予了对给定模式的访问权限。因此,当我的代码使用给定的凭据创建连接并尝试从以下查询中获取表时,它的返回表列表。

SELECT * FROM dba_objects where owner ='schema' and object_type = 'TABLE'

上面的查询使用的是具有授予所有特权的的用户,但是当我尝试使用有限的权限时,它将抛出错误消息。

代码语言:javascript
复制
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"

对于正在创建连接的辅助用户,通过以下查询授予了权限

代码语言:javascript
复制
create user johnsmith identified by Passw0rd;;
grant connect to johnsmith ;
grant select any table to johnsmith ;
grant UPDATE any table to johnsmith ;
grant DELETE any table to johnsmith ;
grant INSERT any table to johnsmith ;

应该授予用户对下列系统表的访问权限.?

  • dba_objects
  • user_constraints
  • user_cons_columns
  • USER_TABLES
  • all_tab_cols并允许访问dbms_metadata.get_dependent_ddl()方法
EN

回答 1

Stack Overflow用户

发布于 2017-06-14 13:29:59

使用初始化参数设置为false,这是默认的,那么:

提供对其他架构中对象的访问的系统权限不允许其他用户访问SYS架构中的对象。例如,SELECT ANY TABLE权限允许用户访问其他模式中的视图和表,但不允许用户选择字典对象(动态性能视图的基表、常规视图、包和同义词)。但是,您可以授予这些用户显式对象特权来访问SYS架构中的对象。

因此,您可以对所需的特定视图授予select特权:

代码语言:javascript
复制
grant select on sys.dba_objects to johnsmith;

对于其他视图也是如此;或者,如果您需要它们拥有对SYS模式对象的更广泛访问,您可以为它们提供一个角色:

代码语言:javascript
复制
grant select_catalog_role to johnsmith;

尽管应该始终应用最小特权原则,但这可能会导致过度使用,并且可能会暴露一些您不希望用户看到的东西。

您不需要为用户提供任何东西才能查询user_*视图。如果您指的是那些(例如dba_tables )的DBA等价物,那么将它们与上面的dba_objects一样授予它们;否则它们将包含在select_catalog_role中。但同样,只给予真正需要的东西。

无论哪种方式,对于dbms_metadata,您也可以对该包授予特权(不能对包中的各个过程授予特权):

代码语言:javascript
复制
grant execute on dbms_metadata to johnsmith;

或者--可能比实际需要的要多得多,而且可能比选择角色更危险:

代码语言:javascript
复制
grant execute_catalog_role to johnsmith
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44545654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档