`
qhuwn
  • 浏览: 71873 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ORACLE角色

阅读更多

Oracle 本身的数据字典设计我个人觉得很合理, 因为

DBA_xxx, ALL_xxx,USER_xxx 让人一看大概就知道

这个视图是干什么用的. 本文简要总结了一下与

权限,角色相关的视图.


. 概述

   与权限,角色相关的视图大概有下面这些:

       DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限

      USER_SYS_PRIVS:   当前用户所拥有的系统权限

      SESSION_PRIVS:     当前用户所拥有的全部权限

      ROLE_SYS_PRIVS:     某个角色所拥有的系统权限

       注意: 要以SYS用户登陆查询这个视图,否则返回空.

      ROLE_ROLE_PRIVS:    当前角色被赋予的角色

      SESSION_ROLES:      当前用户被激活的角色

      USER_ROLE_PRIVS:   当前用户被授予的角色


     
另外还有针对表的访问权限的视图:

       TABLE_PRIVILEGES

        ALL_TAB_PRIVS   

       ROLE_TAB_PRIVS:     某个角色被赋予的相关表的权限

       ...   


. Examples

   1. 查询当前用户所拥有的权限
               Select * from session_privs;

          

   2.   查询某个用户被赋予的系统权限.
           
可以有多种方式

                    Select * from user_sys_privs;

           或者: select * from DBA_SYS_PRIVS where grantee='XXX'

                 (需要当前用户拥有DBA角色)


    3.
查询当前用户被授予的角色:
            1. Select * from SESSION_ROLES order by ROLE  

            说明: 这个查询会返回当前用户所被授予的全部角色, 其中包括

            嵌套授权的角色. 例如将DBA角色授予了一个用户,DBA角色

            已经被授予的角色(例如 exp_full_database imp_full_database)

             也会被查询出来            

           

            2. Select * from USER_ROLE_PRIVS       


     4.
查询某一角色被赋予的系统权限
           Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role

        输入 role='CONNECT'

         输出:
           PRIVILEGE
           --------------------
          ALTER SESSION
            CREATE CLUSTER
            CREATE DATABASE LINK
            CREATE SEQUENCE
            CREATE SESSION
            CREATE SYNONYM
            CREATE TABLE
            CREATE VIEW


     5.
查询当前角色被授予的角色
         Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE

         输入 role= 'DBA'

          输出:

           GRANTED_ROLE
           ----------------------
          DELETE_CATALOG_ROLE
            EXECUTE_CATALOG_ROLE
            EXP_FULL_DATABASE
            IMP_FULL_DATABASE
            PLUSTRACE
            SELECT_CATALOG_ROLE

        说明: PLUSTRACE这个角色是用于执行SQL AUTO TRACE, 通过执行

               $ORACLE_HOME/sqlplus/admin/plustrce.sql可以生成这个角色.

********************************************************

当创建一个角色,为其GRANT权限时,加上了WITH ADMIN OPTION

那么拥有此权限的用户便可以GRANT相应的权限给其他用户

而不能GRANT角色给其他用户,如果想要GRANT角色给其他用户

必须在GRANT role_name TO user_name时,加上WITH ADMIN OPTION

(: GRANT role_name TO user_name WITH ADMIN OPTION)

角色是一组指定的权限,这些权限是系统权限、对象权限或者两者的结合,用于帮助简化权限的管理。不同于单独将系统权限或对象权限授予每个用户,可以将一组系统权限或对象权限授予一个角色,然后将该角色授予用户。这将大量减少维护用户的权限所需的管理开销。图9-6显示了角色如何减少在将角色用于分组权限时需要执行的grant命令(最终是revoke命令)的数量。

9-6 使用角色管理权限

如果需要改变由角色授权给一组人的权限,则只需要改变该角色的权限,并且该角色的用户有能力自动使用改动后的新权限。用户可以有选择地启用角色,有些角色可以在登录时自动启用。此外,可以使用密码保护角色,添加对数据库中该功能的另一种验证级别。

在表9-11中是数据库自动提供的最常见的角色,其中也简要描述了每个角色中的权限。

DBA

所有具有WITH ADMIN OPTION的系统权限。允许具有DBA角色的人将系统权限授予其他人

DELETE_CATALOG_ROLE

没有任何系统权限,而只有SYS.AUD$FGA_LOG$上的对象权限(DELETE)。换句话说,该角色允许用户从用于常规或细粒度审计的审计跟踪中删除审计记录

EXECUTE_CATALOG_ROLE

各种系统程序包、过程和函数上的执行权限,例如DBMS_FGADBMS_RLS

SELECT_CATALOG_ROLE

1 638个数据字典表上的SELECT对象权限

EXP_FULL_DATABASE

EXECUTE_CATALOG_ROLESELECT_CATALOG_ROLE、以及诸如BACKUP ANY TABLERESUMABLE等系统权限。允许具有该角色的用户导出数据库中的所有对象

IMP_FULL_DATABASE

类似于EXP_FULL_DATABASE,但是具有多很多的系统权限,例如CREATE ANY TABLE,用于允许导入前面导出的完整数据库

AQ_USER_ROLE

Advanced Queuing所需例程的执行访问,例如DBMS_AQ

AQ_ADMINISTRATOR_ROLE

Advanced Queuing查询的管理程序

SNMPAGENT

Enterprise Manager Intelligent Agent使用

RECOVERY_CATALOG_OWNER

用于创建一个用户,该用户拥有用于RMAN备份和恢复的恢复目录

HS_ADMIN_ROLE

提供对表HS_*和程序包DBMS_HS的访问,用于管理Oracle Heterogeneous Services

SCHEDULER_ADMIN

提供对程序包DBMS_SCHEDULER的访问,以及用于创建批处理作业的权限

提供角色CONNECTRESOURCEDBA主要是为了兼容以前的Oracle版本,而在将来的Oracle版本中可能不会有这些角色。数据库管理员应该使用授权给这些角色的权限作为起点来创建自定义的角色。

1. 创建或删除角色

为了创建角色,可以使用create role命令,并且必须具有CREATE ROLE系统权限。一般来说,该系统权限只授权给数据库管理员或应用程序管理员。下面是示例:

SQL> create role hr_admin not identified;

Role created.

 

默认情况下,启用或使用已分配的角色不需要任何密码或验证。因此,not identified子句是可选项。

和创建用户一样,可以通过密码(使用identified by password的数据库授权)、通过操作系统(identified externally)或者通过网络或目录服务(identified globally)授权使用角色。

除了这些熟悉的方法,还可以通过使用程序包授权角色:这称为使用安全应用程序角色。这种类型的角色使用程序包中的过程来启用角色。一般来说,只在某些条件下启用这种角色:用户正在通过Web接口或某个IP地址连接,或者是一天的某个时间。下面是使用过程启用的角色:

SQL> create role hr_clerk identified using hr.clerk_verif;

Role created.

 

创建角色时,过程HR.CLERK_VERIF不需要存在。然而,当授予该角色的用户需要启用它时,它必须经过编译并且有效。一般来说,使用安全应用程序角色时,默认情况下不针对用户启用该角色。为了指定在默认情况下启用除了安全应用程序角色之外的所有角色,可以使用如下的命令:

SQL> alter user kshelton default role all except hr_clerk;

User altered.

 

通过这种方式,当HR应用程序启动时,它可以启用角色,其方法是执行set role hr_clerk命令,从而调用过程HR.CLERK_VERIF。用户不需要知道角色或启用角色的过程,因此,对象的访问和角色提供的权限都不可用于应用程序外部的用户。

删除角色和创建角色一样简单:

SQL> drop role keypunch_operator;

Role dropped.

 

下一次连接到数据库时,赋予该角色的任何用户将丢失赋予该角色的权限。如果他们当前已经登录,他们将保留这些权限,直到断开与数据库的连接。

2. 将权限授予角色

将权限赋予角色非常简单,可以使用grant命令将权限赋予角色,如同将权限赋予用户一样:

SQL> grant select on hr.employees to hr_clerk;

Grant succeeded.

SQL> grant create table to hr_clerk;

Grant succeeded.

 

 

 

在该示例中,将对象权限和系统权限赋予HR_CLERK角色。在图9-7中,可以使用基于WebOEM来将更多的对象权限或系统权限添加给该角色。

9-7 使用OEM将权限赋予角色

3. 分配或取消角色

一旦已经将所需的对象权限和系统权限赋予角色,就可以使用如下熟悉的语法将角色赋予用户:

SQL> grant hr_clerk to smavris;

Grant succeeded.

 

SMAVRIS可以自动使用未来授予HR_CLERK角色的其他任何权限,因为SMAVRIS已经被授予该角色。

角色可以授予其他角色,这就允许DBA设计多层次的角色,从而使角色管理更为容易。例如,可能已经具有名为DEPT30DEPT50DEPT100的角色,每个角色具有一些对象权限,分别对应各个部门的表。部门30中的雇员将分配DEPT30角色,依此类推。公司的董事长希望看到所有部门中的表,不必将单个的对象权限赋予角色ALL_DEPTS,而是可以将单个的部门角色赋予ALL_DEPTS

SQL> create role all_depts;

Role created.

SQL> grant dept30, dept50, dept100 to all_depts;

Grant succeeded.

SQL> grant all_depts to sking;

Grant succeeded.

 

 

 

 

 

角色ALL_DEPTS可能也包含单个对象权限和系统权限,这些权限不适用于单个部门,例如订单条目表或账户应收款项表上的对象权限。

从用户处取消角色非常类似于从用户处取消权限:

SQL> revoke all_depts from sking;

Revoke succeeded.

 

下次用户连接到数据库时,这些取消的权限将不再可用于这些用户。然而,值得注意的是,如果另一个角色包含与删除角色相同对象上的权限,或者直接授予对象上的权限,则用户将保留对象上的这些权限,直到显式地取消这些授权和所有其他授权。

4. 默认的角色

默认情况下,当用户连接到数据库时启用授予该用户的所有角色。如果角色将只用于应用程序的上下文中,则在用户登录时可以先禁用该角色,然后在应用程序中启用和禁用该角色。如果用户SCOTT具有CONNECTRESOURCEHR_CLERKDEPT30角色,希望指定HR_CLERKDEPT30默认情况下不启用,则可以使用类似于如下的代码:

SQL> alter user scott default role all

2>     except hr_clerk, dept30;

User altered.

 

 

SCOTT连接到数据库时,他自动具有除HR_CLERKDEPT30外的所有角色授予的所有权限。通过使用set roleSCOTT可以在他的会话中显式地启用一个角色:

SQL> set role dept30;

Role set.

当完成对部门30的表的访问时,可以在会话中禁用该角色:

SQL> set role all except dept30;

Role set.

注意:

Oracle 10g中不赞成使用初始参数MAX_ENABLED_ROLES。保留该参数只是为了和以前的版本兼容。

5. 启用密码的角色

为了增强数据库中的安全性,DBA可以为角色赋予密码。在创建角色时为其赋予密码:

SQL> create role dept99 identified by d99secretpw;

Role created.

SQL> grant dept99 to scott;

Grant succeeded.

SQL> alter user scott default role all except hr_clerk, dept30, dept99;

User altered.

 

 

 

 

 

当用户SCOTT连接到数据库时,他正在使用的应用程序将提供密码或提示用户输入密码,或者他可以在启用角色时输入密码:

SQL> set role dept99 identified by d99secretpw;

Role set.

分享到:
评论

相关推荐

    oracle角色大全信息

    本文将深入探讨Oracle角色大全信息,包括角色的类型、创建、分配、撤销以及常见内置角色的详细说明。 一、角色类型 1. 体系结构角色(System Role):由Oracle提供,具有系统级别的权限,例如DBA角色,拥有对数据库...

    oracle角色管理

    在Oracle数据库系统中,角色管理是一项关键的安全策略,它允许管理员...熟练掌握角色的创建、权限分配、撤销以及角色的管理和维护,将使你成为一个有效的Oracle角色管理员,能够更好地保护数据并优化数据库的日常运营。

    10 oracle管理权限和角色 PPT

    Oracle数据库系统是企业级数据管理的重要工具,其权限和角色管理是确保数据安全性和系统稳定性不可或缺的部分。在Oracle中,权限和角色的概念是为用户提供访问控制机制,允许管理员精细地控制用户对数据库对象的访问...

    Oracle权限、角色和用户1

    Oracle数据库系统在权限管理方面提供了精细的控制机制,旨在确保数据的安全性和访问的合理性。预定义的角色是这一机制的关键组成部分,其中包括CONNECT、RESOURCE、DBA、EXP_FULL_DATABASE和IMP_FULL_DATABASE这五个...

    oracle 用户、权限和角色管理

    oracle 用户、权限和角色管理,oracle 人员必看。

    Oracle学习资源与使用

    Oracle角色是一种权限集合,用于简化权限管理。角色可以包含多种权限,例如CREATE TABLE、SELECT ANY TABLE等。角色可以授予用户,也可以从用户撤销。 SQL 数据操作和查询 SQL(Structured Query Language)是...

    oracle系统自带角色说明

    ### Oracle系统自带角色说明 在Oracle数据库中,为了方便用户管理和使用权限,系统预定义了一系列的角色,这些角色包含了特定的权限组合,可以帮助管理员快速地为不同的用户分配合适的访问权限。本文将详细介绍...

    Oracle创建系统角色DBA

    在Oracle数据库中,系统角色是预定义的一组权限集合,它们为数据库管理员(DBA)提供了方便的方式来管理和分配权限。DBA角色是最具权限的角色之一,通常赋予那些负责数据库全面管理的用户。当误删除了这个关键角色时...

    东北大学Oracle数据库实验报告

    3. **创建Oracle角色**: 使用`CREATE ROLE`语句创建角色,如:`CREATE ROLE UserManRole;` 4. **指定用户角色**: 使用`GRANT`语句将角色授予用户,如:`GRANT UserManRole TO UserMan;` 5. **为角色授予权限**...

    oracle语法及常用命令

    * Oracle 角色和权限:CREATE USER 语句、GRANT 语句、REVOKE 语句等 * Oracle 表管理:CREATE TABLE 语句、ALTER TABLE 语句、DROP TABLE 语句等 八、Oracle 高级使用 * Oracle 存储过程:创建存储过程、执行存储...

    oracle数据库的权限系统分为系统权限与对象权限

    Oracle角色(Role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。 创建用户 ------ 创建用户可以使用create ...

    韩顺平 oracle PPT资料

    - **角色的概念**:理解Oracle角色的概念及其作用。 - **角色管理**:学习如何创建、修改和删除角色。 #### 12. PL/SQL块的结构和实例 - **PL/SQL简介**:了解Oracle的程序化语言PL/SQL的基本结构。 - **PL/SQL块**...

    Oracle用户权限角色设置

    Oracle用户权限角色设置,用来在新建的数据库中添加新的用户,并为其设置权限。

    Oracle Developer:第9章 禁止非法使用.pdf

    Oracle角色管理 角色是数据库中用于将一组权限组织在一起的容器。文档中提到的创建角色(CREATE ROLE)和识别角色(IDENTIFIED BY)暗示了角色的创建和管理。角色的使用可以简化权限管理,使得将权限分配给用户或...

    oracle自学笔记

    #### 三、Oracle 角色详解 在Oracle数据库中,角色是一种用于组织权限的方式。角色可以包含一系列系统权限和对象权限,它们可以被授予给用户,从而使用户获得执行特定操作的能力。 **示例角色**: - **DBA**:...

    Oracle创建删除用户、角色、表空间、导入导出.命令总结

    Oracle创建删除用户、角色、表空间、导入导出.命令总结 从中可以学到很多oracle的知识。尤其针对入门者

    oracle权限及角色.doc

    Oracle数据库权限与角色管理是数据库安全的重要组成部分,它允许管理员有效地控制不同用户对数据库资源的访问。角色是权限的集合,通过角色,管理员可以批量地授予或撤销一组权限,简化权限管理的复杂性。以下是对...

    OracleMembershipProvider asp.net角色管理的oracle版本

    在描述中提到的"asp.net角色管理的oracle版本",意味着这个解决方案专门针对使用Oracle数据库的ASP.NET应用,提供了与角色相关的功能。角色管理是安全控制的一部分,它允许管理员将用户分组到不同的角色,然后根据...

Global site tag (gtag.js) - Google Analytics