ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 控制普通用户访问数据字典

控制普通用户访问数据字典

原创 Linux操作系统 作者:pingley 时间:2012-05-28 13:31:15 0 删除 编辑
控制普通用户访问数据字典
默认情况下普通用户是不能够访问sys schema 中的数据字典的。
SQL> create user testdic identified by test
  2  default tablespace users
  3  temporary tablespace temp;
User created.
SQL> grant create session to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from user_users;
  COUNT(*)
----------
         1
SQL> select count(*) from dba_users;--不能访问位于sys schema 中的数据字典。
select count(*) from dba_users
                     *
ERROR at line 1:
ORA-00942: 表或视图不存在
现实中,普通用户往往需要访问数据字典来获得所需要的信息,这时候可以通过以下的
几种方式来达到。
一、授予普通用户select any dictionary 系统权限。
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> grant select any dictionary to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from dba_users;--可以访问数据字典了。
  COUNT(*)
----------
        23
SQL> select count(*) from v$session;
  COUNT(*)
----------
        22
SQL> select count(*) from hr.employees;--但是不能够访问其他schema 中的对象。
select count(*) from hr.employees
                        *
ERROR at line 1:
ORA-00942: 表或视图不存在
二、给普通用户授予select_catalog_role 角色。
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> revoke select any dictionary from testdic;
Revoke succeeded.
SQL> grant select_catalog_role to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from dba_users;
  COUNT(*)
----------
        23
SQL> select count(*) from V$session;
  COUNT(*)
----------
        22
三、在o7_dictionary_accessibility 参数设置为 true 的时候,普通用户获得select any table 系统权限也可以访问sys schema 中的数据字典。
SQL> show parameter o7
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ----------
O7_DICTIONARY_ACCESSIBILITY          boolean                FALSE
SQL> revoke select_catalog_role from testdic;
Revoke succeeded.
SQL> grant select any table to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from hr.employees;--可以访问其他普通用户schema 中的表。
  COUNT(*)
----------
       107
SQL> select count(*) from dba_users;
select count(*) from dba_users
                     *
ERROR at line 1:
ORA-00942: 表或视图不存在
因为o7_dictionary_accessibility 参数设置为 false,所以不能访问sys schema 中的数据字典。在oracle 9i 起该参数的默认值为false,这样就可以限制带有any 的系统权限访问 sys 中的对象,在其他更早oracle版本中o7_dictionary_accessibility 是默认为true 的,也不应该通过授予用户select any table 系统权限的方式来让他访问数据字典,因为这样用户可以访问其他schema 中的对象。留下安全隐患。
注:如果知道普通用户只需要访问固定的几张数据字典,可以通过以下的方式来授予权限。假如hr 用户只需要访问 dba_users 等几个数据字典表。可以通过一一授予对象权限的方式或者把这些对象的相应权限授予role ,再把role 授权给hr.
SQL> conn hr/hr
Connected.
SQL> select count(*) from dba_users;
select count(*) from dba_users
                     *
ERROR at line 1:
ORA-00942: 表或视图不存在
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> grant select on dba_users to hr;
Grant succeeded.
SQL> conn hr/hr
Connected.
SQL> select count(*) from dba_users;
  COUNT(*)
----------
        23

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-731271/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ora_rowscn 伪列
请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    717581