ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle privilege不得不说的11一个数据字典视图

oracle privilege不得不说的11一个数据字典视图

原创 Linux操作系统 作者:pingley 时间:2012-02-11 23:01:31 0 删除 编辑
oracle privilege不得不说的11一个数据字典视图

dba_roles
数据库定义的所有的角色。
SQL> select count(*) from dba_roles;

  COUNT(*)
----------
        41
我本没有创建什么角色,oracle预置了很多角色,但是oracle不建议简单依赖这些
预定义的角色,而应该根据自己需求自定义角色。

role_tab_privs
分配给角色的表权限。这里的包含的角色是可分配给用户的。
(Information is provided only about roles to which the user has access.)
表结构解释:
role:角色名。
owner:对象的属主。
table_name:对象名。
column_name:列名,如果适用的话。
privilege:授予该角色的对象特权。
grantable:如果该角色带有with admin option,该列是yes,否则是no。
查看OEM_MONITOR的表权限。下面是查询的部分输出。
SQL> select role,table_name,privilege,grantable
  2  from role_tab_privs
  3  where role='OEM_MONITOR';
ROLE                           TABLE_NAME                     PRIVILEGE                                GRANTABLE
------------------------------ ------------------------------ ---------------------------------------- ---------
OEM_MONITOR                    MGMT_HISTORY                   SELECT                                   NO
OEM_MONITOR                    BSLN_OBSERVATION_SET           EXECUTE                                  NO
OEM_MONITOR                    BSLN_TIMEGROUPS                SELECT                                   NO
OEM_MONITOR                    BSLN_STATISTICS                SELECT                                   NO
OEM_MONITOR                    BSLN                           EXECUTE                                  NO
OEM_MONITOR                    MGMT_BSLN_DATASOURCES          SELECT                                   NO
OEM_MONITOR                    MGMT_BSLN_THRESHOLD_PARMS      SELECT                                   NO

role_sys_privs
角色拥有的系统权限
先创建一个测试角色
SQL> create role testrole;
Role created
SQL> grant create session,alter session,create table,
  2  create view,create synonym,create sequence 
  3  to testrole;
Grant succeeded

查询role_sys_privs确定角色testrole的系统权限。
SQL> select * from role_sys_privs
  2  where role='TESTROLE';
 
ROLE                           PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
TESTROLE                       CREATE SESSION                           NO
TESTROLE                       CREATE SYNONYM                           NO
TESTROLE                       CREATE VIEW                              NO
TESTROLE                       CREATE SEQUENCE                          NO
TESTROLE                       CREATE TABLE                             NO
TESTROLE                       ALTER SESSION                            NO
 
dba_role_privs
查看角色分配给什么对象了。
先将testrole角色分配给oracle11g用户。
SQL> grant testrole to oracle11g;
Grant succeeded
SQL> select * from dba_role_privs
  2  where grantee='ORACLE11G';
GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
ORACLE11G                      TESTROLE                       NO           YES
从查询可以看出oracle11g用户获得了testrole角色的特权。

再创建一个角色用于测试
SQL> create role testrole1;
Role created
SQL> grant create trigger,create type,create procedure,create operator
  2  to testrole1;
Grant succeeded
SQL> grant testrole1 to testrole;
Grant succeeded

查询获得testrole1角色的对象。
SQL> select grantee,granted_role
  2  from dba_role_privs
  3  where granted_role='TESTROLE1';
GRANTEE                        GRANTED_ROLE
------------------------------ ------------------------------
TESTROLE                       TESTROLE1
SYS                            TESTROLE1

注:以上5个视图的查询只有DBA才能执行。

user_sys_privs
查看当前用户获得的系统特权。
SQL> show user
User is "oracle11g"
SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLE11G                      CREATE SESSION                           NO
不包括从角色获得的系统特权.create session是最初创建用户的时候授予的。

user_tab_privs
查看当前用户的对象特权
SQL> show user
User is "oracle11g"
SQL> select grantee,table_name,privilege,grantable
  2  from user_tab_privs;
GRANTEE                        TABLE_NAME                     PRIVILEGE                                GRANTABLE
------------------------------ ------------------------------ ---------------------------------------- ---------
ORACLE11G                      EMPLOYEES                      SELECT                                   NO
从查询可以看出oracle11g拥有hr.employees的查询特权。

user_role_privs
查看用户当前分配到的角色
SQL> select username,granted_role,admin_option,default_role
  2  from user_role_privs;
 
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
ORACLE11G                      TESTROLE                       NO           YES
oracle11g用户获得了角色testrole,并且该角色是oracle11g用户的默认角色。

session_roles
当前用户当前启用的角色
SQL> select * from session_roles;
ROLE
------------------------------
TESTROLE
TESTROLE1
testrole1是分配给testrole的。

session_privs
查看当前用户具有的特权。
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
CREATE TABLE
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR

role_tab_privs
查看当前用户具有的通过角色获得的表特权。
先通过角色授权表特权.
SQL> create role tab_role;
Role created
SQL>  grant select,update on hr.employees to tab_role;
Grant succeeded
SQL> grant tab_role to oracle11g;
Grant succeeded
查看通过角色获得的表特权
SQL> select role,table_name,privilege
  2  from role_tab_privs;
ROLE                           TABLE_NAME                     PRIVILEGE
------------------------------ ------------------------------ ----------------------------------------
TAB_ROLE                       EMPLOYEES                      UPDATE
TAB_ROLE                       EMPLOYEES                      SELECT
 

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

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    717950