Oracle数据库用户管理之角色管理(一)--角色创建及使用
mhr18 2024-10-05 17:23 17 浏览 0 评论
【关键术语】
Role 角色
Enabling role 角色生效
Disabling role 角色失效
Predefined roles 预定义角色
Application roles 应用角色
Default roles 默认角色
3.1 角色概述
3.1.1 角色的作用
● 简化权限管理:
使用角色可简化权限管理。可以将一些权限授予某个角色,然后将该角色授予每个用户,而不是将同一组权限授予多个用户。
● 动态进行权限管理:
如果修改了与某个角色关联的权限,则授予该角色的所有用户都会立即自动获得修改过的权限。
● 有选择地使用权限:
通过启用或禁用角色可以暂时打开或关闭权限。启用角色还可以用来验证用户是否已授予该角色。
当建立用户时,用户没有任何权限。为使用户可以连接到数据库并执行各种操作,必须 为其授予相应的系统权限或对象权限。假定要使用户 A、B、C 能够连接到数据库,并具有创建表的权限和可以在 SCOTT.EMP 表上执行 INSERT、UPDATE 操作,那么需要进行 12次授权操作。如图 P1-1 所示。
如果将来要收回用户 A、B、C 的 INSERT ON SCOTT.EMP 权限,则分别需要从每个用 户处收回该权限,共需要三次收回权限的操作。
因为用户 A,B,C 具有相似的权限需求,我们可以通过角色简化授权和收权操作的次数。假定使用角色,首先可以将这四种权限授予角色 OE,然后将该角色分别授予 A,B,C 用户,只需要进行 7 次授权操作,显然可以降低授权次数。如图 P1-2 所示。
如果要回收用户 A、B、C 的 INSERT ON SCOTT.EMP,那么只需要从角色 OE 处收回INSERT ON SCOTT.EMP 对象权限就可以了。
所以,角色使得权限的授予和回收变得方便和简化了。
结论:
在大多数系统中,将必需的权限一个一个授予每一个用户是很耗时的工作,而且很有可
能会出错。Oracle 软件通过角色可实现简单且受控的权限管理。角色是可授予用户或其它
角色的、由相关权限组成的一些命名组。角色的设计目的是为了简化数据库中的权限管理,
从而可提高数据库的安全性。
角色特性:
- ? 角色就像用户,可以授予角色或撤销角色权限。
- ? 角色就像系统权限,可以授予用户或其它角色,也可以从用户或其它角色撤销。
- ? 角色可以由系统权限和对象权限组成。
- ? 可以对授予某一角色的每一个用户启用或禁用该角色。
- ? 可能需要口令才能启用角色。
- ? 角色不由任何用户拥有,角色也不属于任何方案。
3.1.2 系统预定义角色
角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理。当建立数据
库、安装了数据字典和 PL/SQL 包之后,Oracle 会自动建立一些预定义角色。下面介绍一
些 Oracle 常用的预定义角色:
功能角色
已经创建了一些授权您管理特殊功能的其它角色(如果已安装这些功能)。例如,
XDBADMIN 包含管理扩展标记语言(XML) 数据库(如果已安装此功能)所需的权限。
AQ_ADMINISTRATOR_ROLE 提供管理高级队列的权限。HS_ADMIN_ROLE 包括管理异种服务所需的权限。在没有 Oracle 技术支持协助的情况下,一定不能改变授予这些功能角色的权限,因为这样做可能会无意禁用所需的功能
1)CONNECT 角色
? Oracle 10g R2之前:
- 1 CREATE SESSION
- 2 CREATE TABLE
- 3 CREATE VIEW
- 4 CREATE SYNONYM5 CREATE CLUSTER
- 6 CREATE DATABASE LINK
- 7 CREATE SEQUENCE
- 8 ALTER SESSION
? Oracle 10g R2之后:
oracle CONNECT 角色现在只有这一个权限: CREATE SESSION
如果想还原原来的 oracle CONNECT 角色的设置,Oracle 提供了下面的脚本:
$ORACLE_HOME/rdbms/admin/rstrconn.sql.
2)RESOURCE 角色
- 1 CREATE CLUSTER
- 2 CREATE SEQUENCE
- 3 CREATE TRIGGER
- 4 CREATE TABLE
- 5 CREATE PROCEDURE
- 6 CREATE TYPE
- 7 CREATE OPERATOR
- 8 CREATE INDEXTYPE
从 role_sys_privs 中看 ORACLE resource 角色的权限:
SQL> select PRIVILEGE from role_sys_privs where role='RESOURCE';
当把 ORACLE resource 角色授予一个 user 的时候,不但会授予 ORACLE resource 角色
本身的权限,而且还有 unlimited tablespace 权限。
1 SQL> conn desk 2 Enter password: 3 Connected. 4 SQL> select PRIVILEGE from user_sys_privs; 5 no rows selected 6 SQL> conn / as sysdba 7 Connected. 8 SQL> grant resource to desk; 9 Grant succeeded. 10 SQL> conn desk 11 Enter password: 12 Connected. 13 SQL> select PRIVILEGE from user_sys_privs; 14 PRIVILEGE 15 ---------------------------------------- 16 UNLIMITED TABLESPACE 17 SQL> 18 当把 resource 授予一个 role 时,就不会授予 unlimited tablespace 权限 19 SQL> show user 20 USER is "SYS" 21 SQL> create role testrole identified using testrole; 22 Role created. 23 SQL> revoke resource from desk; 24 Revoke succeeded. 25 SQL> grant resource to testrole; 26 Grant succeeded. 27 SQL> grant testrole to desk; 28 Grant succeeded. 29 SQL> conn desk 30 Enter password: 31 Connected. 32 SQL> select privilege from user_sys_privs; 33 no rows selected 34 SQL>
3)DBA 角色
DBA 是在建立数据库时 Oracle 执行脚本 SQL.BSQ 自动建立的角色,该角色具有所有 系统权限以及 WITH ADMIN OPTION 选项。
要注意的是,CONNECT、RESOURCE、DBA 三种角色是为与先前版本兼容而保留的, 在将来版本中可能不会自动建立。
4)EXP_FULL_DATABASE 角色
EXP_FULL_DATABASE 角色是在安装数据字典时执行 CATEXP.SQL 脚本建立的角色,
该角色用于执行数据库的完全导出和增量导出操作,并且它包含以下一些权限和角色:
系统权限 SELECT ANY TABLE、BACKUP ANY TABLE、EXECUTE ANY PROCEDURE、
EXECUTE ANY TYPE、ADMINISTER RESOURCE MANAGER,在表 SYS.INCVID、SYS.
INCFIL 以 及 SYS . INCEXP 上 的 INSERT 、 DELETE 和 UPDATE 对 象 权 限 , 以 及
EXECUTE_CATALOG_ROLE 和 SELECT_CATALOG_ROLE 角色。
5)IMP_FULL_DATABASE 角色
IMP_FULL_DATABASE 角色也是在安装数据字典时执行 CATEXP.SQL 脚本建立的角
色,该角色用于执行完全数据库导人操作,它包含了 EXECUTE CATALOG ROLE 和
SELECT_CATALOG_ROLE 角色以及大量系统权限(查询 DBA_ SYS_ PRIVS)。
6)DELETE_CATALOG_ROLE 角色
DELETE_CATALOG_ROLE 是在建立数据库时 Oracle 执行 SQL.BSQ 自动建立的角色,该角色提供了在系统审计表 SYS.AUD$上的 DELETE 对象权限。
7)EXECUTE_CATALOG_ROLE 角色
EXECUTE_CATALOG_ROLE 是在建立数据库时 Oracle 执行 SQL.BSQ 自动建立的角
色,该角色提供了对所有系统 PL/SQL 包的 EXECUTE 对象权限。
8)SELECT_CATALOG_ROLE 角色
SELECT_CATALOG_ROLE 是在建立数据库时 Oracle 执行 SQLBSQ 自动建立的角色,
该角色提供了在所有数据字典上的 SELECT 对象权限。
3.2 创建和使用角色
3.2.1 创建角色
尽管在设计应用时可以直接使用预定义角色,但出于安全考虑,Oracle,建议使用自定
义角色。建立角色是使用命令 CREATE ROLE,由 DBA 来完成的,但如果要以其他用户身
份建立角色,那么要求该用户必须具有 CREATE ROLE 系统权限。
1.建立角色:不验证
采用不验证方式建立的角色,只是在数据字典中存放角色名称的信息,并且在使角色生
效时不需要进行任何检查。
【实例 1-1】创建不需要验证的角色 oe_clerk。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)创建角色 SOL>CREATE ROLE oe_clerk; 角色已创建
与用户类似,角色也可以进行验证,以确保角色的安全性。
2.建立角色:数据库验证
数据库验证是指使用数据库检查角色及其口令的方式。当采用这种方式时,角色名及口
令是存放在数据库中的。当使角色生效时,必须提供口令。
【实例1-2】创建数据库验证的角色 hr_clerk。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA已连接。 2)创建角色 SOL>CREATE ROLE hr_clerk IDENTIFIED BY bonus; 角色已创建
3.建立角色:外部验证
外部验证是指使用操作系统服务或网络服务检查角色的方式。
【实例 1-3】创建外部验证的角色 hr_manager。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)创建角色 SOL>CREATE ROLE hr_manager IDENTIFIED EXTERNALLY; 角色已创建
4.建立应用角色
通过使用应用角色可以避免激活角色,采用这种方式建立角色之后,使角色生效是由认
证包来完成的。
【实例 1-4】创建应用角色 admin_role。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)创建角色 SOL>CREATE ROLE admin_role IDENTIFIED USING hr.pcrt; 角色已创建
其中 USING 子句用于指定认证包。当建立了应用角色 admin_role 之后,该角色可以由
HR 用户的 pcrt 包中的任何过程或函数激活。
角色创建后,角色没有任何权限。为了使得角色分配给用户后,用户具有相应权限,就
必须为角色授予系统权限或对象权限。给角色授权与给用户授权的方法完全相同。
【实例1-5】给角色授系统权限。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)角色授权 SOL>GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO oe_clerk WITH ADMIN OPTION; 授权成功。
这样,当用户具有角色 oe_clerk 时,该用户就可以连接到数据库,并能创建表。另外,
因为在授予这些系统权限时带有 WITH ADMIN OPTION 选项,所以具有该角色的用户还可
以将这些系统权限授予其他用户或角色。
注意,UNLIMITED TABLESPACE 系统权限不能被授予角色;当将对象权限授予角色
时,不能带有 WITH GRANT OPTION。
3.2.2 用控制台创建角色
用控台创建角色的步骤如下:
3.2.3 分配角色
分配角色是指将角色分配给某用户。在建立了角色并为其授予了权限之后,必须将该角
色分配给用户,它才能起作用。分配角色与授予系统权限的命令完全相同。当将角色分配给
用户时,用户将具有角色的所有系统权限和对象权限。一般情况下,分配角色是由 DBA 来
完成的,如果要以其他用户身份分配角色,则要求该用户必须具有 GRANT ANY ROLE 系
统权限或角色的 WITH ADMIN OPTION 选项。
【实例 1-6】把角色 oe_clerk 分配给用户 devp。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)分配角色 SOL>GRANT oe_clerk TO devp ; 授权成功。 2)创建表 SQL>connect devp/development 已连接。 SQL>CREATE TABLE tt(a int); 表已创建。
把角色分配给 devp 用户后,用户 devp 就具有角色的所有权限了。
【实例 1-7】把角色 hr_manager 分配给用户 devp。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)分配角色 SOL>GRANT hr_manager TO devp WITH ADMIN OPTION; 授权成功。
这里,在分配角色时使用了 WITH ADMIN OPTION 选项,这样该用户将具有如下权利:
- ? 将这个角色再授予其它用户。
- ? 从任何具有这个角色的用户那里回收该角色
- ? 删除和修改这个角色
因此,在为用户分配角色时应当谨慎使用 WITH ADMIN OPTION 选项,因为该用户将对角色具有完全控制能力。
3.2.4 用控制台分配角色
以下是使用控制台分配角色的步骤:
3.2.5 默认角色
默认角色是用户所具有的角色的子集,当为用户指定了默认角色后,以该用户身份登录
时会自动激活其默认角色,即用户具有了角色的权限。当我们为用户分配了角色之后,只要
没有用 ALTER USER …DEFAULT ROLE 作过修改,那么这些角色都是用户的默认角色。但
有时要把某些角色设为默认角色,有些角色不是默认角色,就要用命令显式设定。设置默认
角色一般是由 DBA 来完成的,如果要以其他用户身份设置用户的默认角色,则要求该用户
必须具有 ALTER USER 系统权限。
1.把用户的所有角色都设为默认角色
使用 ALTER USER 命令可以把一个用户的所有角色都设置为默认角色,这样,当以该
用户身份登录之后,系统会自动激活该用户的所有角色,用户就具有了角色的所有权限。
【实例 1-8】把用户 devp 的所有角色都设置为默认角色,并查看该用户当前激活的角色。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)设置默认角色 SOL>ALTER USER devp DEFAULT ROLE ALL; 用户已更改。 3)以 devp 帐户登录 SOL>connect devp/development 已连接。 4)查看 devp 用户当前激活的角色 SOL>SELECT * FROM session_roles; ROLE ------------ HR_CLERK OE_CLERK
2.指定除某些角色外其他角色都为默认角色
在为用户分配了多个角色之后,可以明确指明多数角色为默认角色,使少数几个角色成
为非默认角色。
【实例 1-9】指定除某些角色外其他角色都为默认角色,并验证。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)设置默认角色 SOL>ALTER USER devp DEFAULT ROLE ALL EXCEPT hr_manager; 用户已更改。 3)以 devp 帐户登录 SQL>connect devp/development 已连接。 4)验证 devp 权限 SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或视图不存在
因为未将 hr_manager 角色设置为 devp 用户的默认角色,所以以 devp 用户身份登录后 不会激活 hr_manager 角色。此时该用户将不能执行 hr_manager 角色所具有的权限操作。
3.指定某些角色为用户的默认角色
在为用户分配了多个角色之后,如果只是要将少数角色设置为默认角色,那么可以使用
如下方法。
【实例 1-10】把用户 devp 的某些角色设置为默认角色
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)设置默认角色 SOL>ALTER USER devp DEFAULT ROLE oe_clerk; 用户已更改。 SQL>connect devp/development 已连接。 3)验证角色 SOL>SELECT * FROM session_roles; ROLE ------------ OE_CLERK SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或视图不存在
因为用户 devp 的默认角色被设置为 oe_clerk,所以,以 devp 用户身份登录后只会激活角色 oe_clerk,并且只能执行这种角色所允许的权限操作。
4.指定无默认角色
在建立了用户之后,可以指定用户无任何默认角色。方法如下:
SOL>connect / AS SYSDBA 已连接。 SOL>ALTER USER alex DEFAULT ROLE NONE; 用户已更改。
因为没有给 Alex 用户设置默认角色,所以以 Alex 用户身份登录之后不会激活任何角色,从而使得该用户不能执行任何角色所具有的权限操作。
写在最后的话
感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流、转发和关注,感谢
相关推荐
- SQL入门知识篇(sql入门新手教程视频)
-
一、什么是数据库?什么是SQL?1、数据库:存放数据,可以很多人一起使用2、关系数据库:多张表+各表之间的关系3、一张表需要包含列、列名、行4、主键:一列(或一组列),其值能够唯一区分表中的每个行。5...
- postgresql实现跨库查询-dblink的妙用
-
技术导语:用惯了oracle的dblink,转战postgresql,会一时摸不着头脑。本期就重点详细讲解postgresql如何安装dblink模块及如何使用dblink实现跨库查询。安装cont...
- Oracle VM VirtualBox虚拟机软件(oracle vm virtualbox win10)
-
OracleVMVirtualBox是一款完全免费的虚拟机软件,下载银行有提供下载,软件支持安装windows、linux等多个操作系统,让用户可以在一台设备上实现多个操作系统的操作。同时软件有着...
- 开源 SPL 轻松应对 T+0(开源srs)
-
T+0问题T+0查询是指实时数据查询,数据查询统计时将涉及到最新产生的数据。在数据量不大时,T+0很容易完成,直接基于生产数据库查询就可以了。但是,当数据量积累到一定程度时,在生产库中进行大数据...
- 中小企业佳选正睿ZI1TS4-4536服务器评测
-
随着科技的不断发展,各行各业对于数据使用越加频繁,同时针对服务器的选择方面也就越来越多样化和细分化。那么对于我们用户来说,如何选择符合自身业务需求和最优性价比的产品呢?笔者将通过刚刚购买的这台服务器的...
- MFC转QT:Qt基础知识(mfc和qt的区别)
-
1.Qt框架概述Qt的历史和版本Qt是一个跨平台的C++应用程序开发框架,由挪威公司Trolltech(现为QtCompany)于1991年创建。Qt的发展历程:1991年:Qt项目启动1995年...
- 数据库,QSqlTableModel(数据库有哪些)
-
QMYSQL——mysqlQSQLITE——sqliteQOICQ——orcale所需头文件.pro增加sql#include<QSqlDatabase>#include<Q...
- python通过oledb连接dbf数据库(python连接jdbc)
-
起因:因为工作需要,需要读取dbf文件和系统数据中数据进行校对,因为知道dbf文件可以用sql查询,所以想能不能像mysql/oracle那样连接,再调用执行sql方法,通过一系列百度,尝试,最终通过...
- Excel常用技能分享与探讨(5-宏与VBA简介 VBA与数据库)
-
在VBA(VisualBasicforApplications)中使用数据库(如Access、SQLServer、MySQL等)具有以下优点,适用于需要高效数据管理和复杂业务逻辑的场景:1....
- Excel常用技能分享与探讨(5-宏与VBA简介 VBA与数据库-二)
-
以下是常见数据库软件的详细配置步骤,涵盖安装、驱动配置、服务启动及基本设置,确保VBA能够顺利连接:一、MicrosoftAccess适用场景:小型本地数据库,无需独立服务。配置步骤:安装Acces...
- Windows Docker 安装(docker安装windows容器)
-
Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的L...
- Windows下安装Ubuntu虚拟机方法(windows下安装ubuntu20)
-
在Windows下安装Ubuntu虚拟机。选择使OracleVMVirtualBox安装Ubuntu虚拟机。1.下载和安装OracleVMVirtualBox:访问OracleVMVir...
- java入门教程1 - 安装和配置(win和linux)
-
windows安装和配置安装javahttps://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html目前大部分项目的...
- Centos7 安装Tomcat8服务及配置jdk1.8教程
-
1、下载jdk1.8压缩包下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmltom...
- 全网最完整的免费java教程讲义(一)——java配置和安装
-
一,安装Java1)安装JDK要学习和使用java,首先需要安装JDK(JavaDevelopemntKit),相当于java安装包。Java的下载页在甲骨文官网上:https://www.or...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- SQL入门知识篇(sql入门新手教程视频)
- postgresql实现跨库查询-dblink的妙用
- Oracle VM VirtualBox虚拟机软件(oracle vm virtualbox win10)
- 开源 SPL 轻松应对 T+0(开源srs)
- 中小企业佳选正睿ZI1TS4-4536服务器评测
- MFC转QT:Qt基础知识(mfc和qt的区别)
- 数据库,QSqlTableModel(数据库有哪些)
- python通过oledb连接dbf数据库(python连接jdbc)
- Excel常用技能分享与探讨(5-宏与VBA简介 VBA与数据库)
- Excel常用技能分享与探讨(5-宏与VBA简介 VBA与数据库-二)
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)