设为首页 收藏本站
查看: 854|回复: 0

[经验分享] Oracle中的用户、角色、权限(三)

[复制链接]

尚未签到

发表于 2016-8-10 06:03:48 | 显示全部楼层 |阅读模式
  三、角色
  所谓角色,其实可以理解为是一组权限的集合。通过使用角色,可以更简单、更容易的管理权限。
  

  角色的创建:
  

SQL> create role r1; --创建无密码的角色
Role created.
SQL> create role r2 identified by r2;  --创建有密码的角色
Role created.
  
  
  
  角色的修改:
  

SQL> alter role r1 identified by r1;  --设置或修改角色r1的密码
Role altered.
SQL> alter role r2 not identified; --把角色r2设为无密码
Role altered.
  
  
  给角色赋予权限:
  


SQL> grant create session to r1;  --给角色r1赋予create session权限
Grant succeeded.
   
  角色的授予:
  


SQL> grant r1 to u1;  --把角色r1授予用户u1
Grant succeeded.
SQL> grant r1 to public;  --把角色r1授予所有用户
Grant succeeded.

   默认角色:当一个用户拥有多个角色的时候,可以为该用户指定默认角色,所谓默认角色,指该用户登录数据库时所生效的角色,该用户的其它非默认角色将不生效。
  


SQL> grant r2 to u1;  --把角色r2赋予u1,此时u1具有r1、r2两个权限
Grant succeeded.
SQL> alter user u1 default role r1;  --把u1的默认角色设为r1
User altered.
SQL> alter user u1 default role all;  --将u1的默认角色设为它所具有的全部角色
User altered.
SQL> alter user u1 default role none;  --将u1的默认角色设为空
User altered.
SQL> alter user u1 default role all except r1;  --将出角色r1之外的其它角色设为u1的默认角色
User altered.

  
  通过set role命令,可以临时改变一个用户的角色。
  


SQL> grant r1,r2 to u1;
Grant succeeded.
SQL> alter user u1 default role r1;  --把u1的默认角色设为r1
User altered.
SQL> conn u1/u1;  --登录用户u1,此时u1具有r1的角色
Connected.
SQL> select * from session_roles;
ROLE
------------------------------
R1
SQL> set role r1,r2 identified by r2;  --使u1临时具有r1,r2的权限,因为r2有密码,所以必须要输入密码,这就是建立密码角色的作用。
Role set.
SQL> select * from session_roles;  --查询此时u1具有的角色
ROLE
------------------------------
R1
R2

SQL> set role r2 identified by r2;  --也可以把u1的角色临时设为r2
Role set.
SQL> select * from session_roles;
ROLE
------------------------------
R2
SQL> set role all except r1;  --发现当all里面包含有密码的角色时,会报错,当时下面的却可以
set role all except r1
*
ERROR at line 1:
ORA-01979: missing or invalid password for role 'R2'

SQL> set role all except r2;  --把u1的角色设为除r2外
Role set.
SQL> conn /as sysdba
Connected.
SQL> conn u1/u1  --重新登录u1的时候,此时的角色是设置的默认角色
Connected.
SQL> select * from session_roles;
ROLE
------------------------------
R1


   删除角色:
  


SQL> drop role r1;
Role dropped.
  
  关于上面的设置密码的角色,在应用中可以把具有增删改权限的角色设为有密码的角色,并设为非默认角色,则当用户要对数据库进行修改的时候必须要输入密码,这样可以在一定程度上保护数据不被破坏。
  

  数据库中预先定义的角色:
  1)CONNECT、RESOURCE、DBA  这几个权限比较常见
  2)SELECT_CATALOG_ROLE:查询数据字典的权限
  3)DELETE_CATALOG_ROLE:删除数据字典的权限
  4)EXECUTE_CATALOG_ROLE:执行数据字典包的权限
  
  数据库中与角色有关的数据字典,主要有以下几个:
  

  dba_roles:数据库中存在的所有角色
  


SQL> desc dba_roles;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ROLE                                      NOT NULL VARCHAR2(30)
PASSWORD_REQUIRED                                  VARCHAR2(8)

   dba_role_privs:数据库中用户和角色所具有的角色
  


SQL> desc dba_role_privs;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
GRANTEE                                            VARCHAR2(30)
GRANTED_ROLE                              NOT NULL VARCHAR2(30)
ADMIN_OPTION                                       VARCHAR2(3)
DEFAULT_ROLE                                       VARCHAR2(3)
   role_role_privs:数据库中角色所具有的角色
  


SQL> desc role_role_privs;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ROLE                                      NOT NULL VARCHAR2(30)
GRANTED_ROLE                              NOT NULL VARCHAR2(30)
ADMIN_OPTION                                       VARCHAR2(3)
  
  role_sys_privs:角色所具有的系统权限
  


SQL> desc role_sys_privs;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ROLE                                      NOT NULL VARCHAR2(30)
PRIVILEGE                                 NOT NULL VARCHAR2(40)
ADMIN_OPTION                                       VARCHAR2(3)

  
  role_tab_privs:角色所具有的对象权限
  


SQL> desc role_tab_privs;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ROLE                                      NOT NULL VARCHAR2(30)
OWNER                                     NOT NULL VARCHAR2(30)
TABLE_NAME                                NOT NULL VARCHAR2(30)
COLUMN_NAME                                        VARCHAR2(30)
PRIVILEGE                                 NOT NULL VARCHAR2(40)
GRANTABLE                                          VARCHAR2(3)

  
  session_roles:当前用户所具有的角色
  


SQL> desc session_roles;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ROLE                                      NOT NULL VARCHAR2(30)
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255368-1-1.html 上篇帖子: 《ArcSDE vs. Oracle Spatial》 PDF 下篇帖子: 从Oracle中读取Job_Data参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表