Oracle数据库用户管理之角色管理(二)--角色其他操作
sinye56 2024-10-11 17:27 5 浏览 0 评论
3.3 其它操作
3.3.1 设置角色生效或失效
1.使角色生效
使角色生效是指使当前会话用户所具有的角色有效。当生效了某个角色后,当前用户会
话将可以执行该角色所具有的所有权限操作。不过,要注意以下两点:
- ? 角色生效或失效只对当前会话有效。
- ? 使新角色生效会自动禁止其他所有角色。
当设置了用户的默认角色之后,以用户身份登录时会自动激活默认角色。为了执行特定
角色的操作,可以使该角色生效,从而使其它角色临时被收回。生效角色是使用 SET ROLE
命令来完成的,有具有角色的用户自己设置。
如果在建立角色时未指定角色验证方式,那么在生效角色时不需要进行口令验证。
【实例 2-1】使角色 oe_clerk 生效,但不验证的角色
1)以 devp 用户登录 SOL>CONNECT devp/development 已连接。 2)设置角色生效 SOL>SET ROLE oe_clerk; 角色集 当生效了 oe_clerk 角色之后,就可以执行该角色所具有的权限操作了。但因为生效新角色会自动禁止其他所有角色,所以此时只能执行 oe_clerk 角色的权限操作,而不能执行任何 其他角色的权限操作。如下所示: SOL>CREATE TABLE Tl(acol int); 表已创建。 SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或视图不存在 SET ROLE 是 SQL*Plus 命令,如果要在应用程序生效或失效角色,那么必须使用包 DBMS_SESSION。例如: SOL>CONNECT devp/development 已连接。 SOL>EXECUTE DBMS_SESSION.SET_ROLE('oe_clerk'); PL/SQL 过程已成功完成。
如果在建立角色时指定了数据库验证方式,那么在生效角色时必须提供口令。
【实例 2-2】使角色 hr_clerk 生效,验证的角色
1)以 aaron 用户登录 SOL>CONNECT aaron/soccer 已连接。 2)设置角色生效 SOL>SET ROLE hr_clerk IDENTIFIED BY bonus; 角色集
2.使角色失效
使角色失效是指使当前会话用户所具有的所有角色全部无效。当设置了角色失效之后,
用户将不能执行其所有角色所具有的权限操作。
【实例 2-3】使角色失效
1)以 aaron 用户登录SOL>CONNECT aaron/soccer 已连接。 2)设置角色失效 SOL>SET ROLE NONE; 角色集
3.3.2 修改角色
修改角色是使用命令 ALTER ROLE 来完成的,修改角色包括修改角色验证方式以及角
色口令两个方面。一般情况下修改角色是由 DBA 来完成的,但如果要以其他用户身份修改
角色信息,那么要求该用户必须具有 ALTER ANY ROLE 系统权限或角色上的 WITH ADMIN
OPTION 选项。
1.修改角色验证方式
在建立角色 oe_clerk 时,未采用任何验证方式,即设置该角色生效时,不需要验证。为
了限制用户对该角色的使用,将其修改为数据库验证方式。
【实例 2-4】修改角色 oe_clerk 为数据库验证方式。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)修改角色 SOL>ALTER ROLE oe_clerk IDENTIFIED BY order; 角色已丢弃。
【实例 2-5】把角色 hr_manager 修改为不需验证的角色。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)修改角色 SOL>ALTER ROLE hr_manager NOT IDENTIFIED; 角色已丢弃。
2.修改角色口令
在采用数据库验证方式建立了角色之后,出于安全考虑应该定期修改角色口令。
【实例 2-6】修改角色 oe_clerk 口令。
1)以管理员身份登录
SOL>CONNECT / AS SYSDBA 已连接。 2)修改角色 SOL>ALTER ROLE oe_clerk IDENTIFIED BY order_comm; 角色已丢弃。
3.3.3 回收角色
角色分配给用户后,用户就拥有了角色的权限,当角色的权限要从用户中收回时,可以
回收用户的角色,就如同前面介绍的回收用户权限一样,也是采用 REVOKE 命令。一般情
况下回收角色是由 DBA 来完成的,但如果要以其他用户身份回收角色,那么要求该用户必
须具有 GRANT ANY ROLE 权限或角色上的 WITH ADMIN OPTION 选项。
【实例2-7】从用户 devp 中回收角色 oe_clerk。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)回收角色 SOL>REVOKE oe_clerk FROM devp; 撤销成功。
3.3.4 用控制台回收角色
3.3.5 删除角色
当角色不需要时,可以进行删除。删除角色是使用 DROP ROLE 命令由 DBA 来完成的,
如果要以其他用户身份删除角色,则要求该用户必须具有 DROP ANY ROLE 系统权限或者
角色上的 WITH ADMIN OPTION。
【实例2-9】删除角色 admin_role。
1)以管理员身份登录SOL>CONNECT / AS SYSDBA 已连接。 2)删除角色 SOL>DROP ROLE admin_role; 角色已丢弃
如果角色已经被分配给了用户,那么当删除角色时 Oracle 会自动收回用户所具有的角色。
3.3.6 查询角色信息
Oracle 提供了一些数据字典视图供查询角色的信息,下面介绍几个常用的数据字典视图,以获得角色的信息。
1.查询所有的角色
数据字典视图 DBA_ROLES 中包含了数据库中所有的角色,查询它可以了解数据库中
到底定义了哪些角色,它们采用了什么样的验证方式?
【实例 2-10】查询数据库中所有的角色。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)查询 SOL>SELECT role, password_required FROM dba_roles; ROLE PASSWORD ------------------------------ -------- CONNECT NO RESOURCE NO DBA NO SELECT_CATALOG_ROLE NO EXECUTE_CATALOG_ROLE NO DELETE_CATALOG_ROLE NO EXP_FULL_DATABASE NO IMP_FULL_DATABASE NO RECOVERY_CATALOG_OWNER NO GATHER_SYSTEM_STATISTICS NO LOGSTDBY_ADMINISTRATOR NO ……
列说明如下:
- ROLE:角色名。
- PASSWORD_REQUIRED:角色的验证方式。
2.显示角色所具有的系统权限
当建立角色时,角色没有任何权限。为了使得角色可以执行特定 SQL 命令,必须为其
授予系统权限,并且在为角色授予系统权限时可以带有 WITH ADMIN OPTION 选项。那么
如何确定角色具有哪些系统权限呢?通过查询数据字典视图 ROLE_SYS_PRIVS,可以显示角
色所具有的系统权限。
【实例 2-11】查询角色 oe_clerk 所具有的系统权限。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)查询 SOL>SELECT * FROM ROLE_SYS_PRIVS WHERE role='OE_CLERK'; ROLE PRIVILEGE ADM ------------------------------------------------------- OE_CLERK CREATE VIEW YES OE_CLERK CREATE SESSION YES OE_CLERK CREATE TABLE YES
当执行了以上 SELECT 语句之后,会显示角色 oe_clerk 所具有的系统权限以及 WITH
- ADMIN OPTION 选项,列说明如下:
- ROLE:角色名。
- PRIVILEGE:系统权限。
- ADMIN_OPTION:转授系统权限选项。YES 表示可以转授系统权限,而 NO 则表示不能转授系统权限。
3.角色所具有的对象权限
当建立角色时,角色没有任何权限。为了使得角色可以访问特定模式对象,必须为其授
予对象权限。要注意,在为角色授予对象权限时不能带有 WITH GRANT OPTION 选项。如
何确定角色具有哪些对象权限呢?通过查询数据字典 ROLE_TAB_PRIVS,可以显示角色所
具有的对象权限。
【实例 2-12】查询角色 oe_clerk 所具有的对象权限。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)查询SOL>SELECT owner, table_name, privilege, grantable FROM ROLE_TAB_PRIVS WHERE role= 'HR_MANAGER '; OWNER TABLE_NAME PRIVILEGE GRA ----------------------------------------------- SCOTT SALGRADE DELETE NO
当执行了以上 SELECT 语句之后,会返回角色 hr_manager 所具有的对象权限,其中列
说明如下:
- OWNER:对象所有者,即模式名。
- TABLE_NAME:对象名。
- PRIVILEGE:对象权限。
- GRANTABLE:转授对象权限选项。因为在为角色授予对象权限时不能带有 WITH
- GRANT OPTION 选项,所以该列的值永远为“NO”。
4.显示用户的默认角色
当以用户身份连接到数据库时,Oracle 会自动激活默认角色。那么如何确定用户具有哪
些默认角色呢?通过查询数据字典 dba_role_privs,可以显示用户所具有的角色以及默认角色
等信息。
【实例 2-13】查询用户 devp 的默认角色。
1)以管理员身份登录 SOL>CONNECT / AS SYSDBA 已连接。 2)查询 SOL>SELECT granted_role FROM dba_role_privs WHERE grantee=’DEVP’ AND default_role=’YES’; GRANTED_ ROLE ---------------------------- OE_CLERK
当执行了上述查询语句之后,会显示用户 devp 的默认角色。其中列说明如下:
- GRANTED_ROLE:被授予的角色。
- GRANTEE:角色所有者,即用户。
- DEFAULT_ROLE:YES 表示默认角色,NO 表示不是默认角色。
5.显示当前用户所具有的所有角色
通过查询数据字典视图 user_role_privs 可以显示当前用户所具有的角色。
【实例2-14】查询当前用户 devp 所具有的角色。
1)以 devp 用户登录 SOL>CONNECT devp/development 已连接。 2)查询 SOL>SELECT username, granted_role FROM user_role_privs WHERE username= 'DEVP '; USERNAME GRANTED_ROLE --------------------------------------------- DEVP OE_CLERK DEVP HR_MANAGER
6.显示当前会话生效的角色
尽管用户 devp 具有多个角色,但以该用户身份登录之后,只能使用被生效角色所具有
的权限,而不能执行未生效角色所具有的权限操作。那么如何确定当前会话已生效的角色呢?
通过查询数据字典 session_roles,可以显示当前会话所生效的角色,
【实例 2-15】查询当前会话所生效的角色。
1)以 devp 用户登录 SOL>CONNECT devp/development 已连接。 2)设置角色生效 SOL>SET ROLE oe_clerk; 角色集 3)查询生效的角色 SOL>SELECT * FROM session_roles; ROLE ------------ OE_CLERK
保护角色
默认情况下通常会启用角色,这意味着如果角色已授予用户,用户就可以行使指定给角色的权限。此时用户可以:
? 使角色成为非默认角色。将角色授予用户后,取消选中“DEFAULT(默认)”复选框。现在,用户必须先显式启用角色,才可以行使角色的权限。
? 要求角色有附加验证。默认情况下角色的验证为“无”,但可以要求角色有附加验证,之后才可以设置角色。
? 只通过成功地执行 PL/SQL 过程才支持创建安全的应用程序角色。通过 PL/SQL 过程可以检查用户运行程序的用户网络地址、日期时间或正确保护权限组所需的其它元素。
3.4 小结
角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理。Oracle 提供
的一些预定义角色,常用的是 CONNECT 和 RESOURCE。用户也可以创建新的角色,为了
确保角色的安全性,角色也可以进行验证。角色创建后,就可以分配给用户了。将角色分配
给用户时,用户将具有角色的所有系统权限和对象权限。在分配角色时如果使用了 WITH
ADMIN OPTION 选项,用户有权将这个角色再授予其它用户。每个用户可拥有一些默认角
色,默认角色是在用户登录时自动生效的角色。
写在最后的话
感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流、转发和关注,感谢
相关推荐
- Linux基础知识之修改root用户密码
-
现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...
- Linux如何修改远程访问端口
-
对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...
- 如何批量更改文件的权限
-
如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...
- CentOS「linux」学习笔记10:修改文件和目录权限
-
?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...
- Linux下更改串口的权限
-
问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...
- Linux chown命令:修改文件和目录的所有者和所属组
-
chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...
- chmod修改文件夹及子目录权限的方法
-
chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...
- Android 修改隐藏设置项权限
-
在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...
- 完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!
-
最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...
- linux改变安全性设置-改变所属关系
-
CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...
- Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod
-
#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...
- linux更改用户权限为root权限方法大全
-
背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...
- 怎么用ip命令在linux中添加路由表项?
-
在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...
- Linux配置网络
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux系列---网络配置文件
-
1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)