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

[经验分享] oracle 10g 和 11g 关于角色口令的区别

[复制链接]

尚未签到

发表于 2016-8-7 07:12:41 | 显示全部楼层 |阅读模式
  角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理
  而一旦这个集合的权限超过了用户的最低需求,就可能带来数据库的安全风险
  

  角色口令测试
  oracle 10g中,无论角色是否有口令,只要你将角色grant给某个用户,那么,默认的情况下,这些角色中的权限,用户都拥有。
  oracle 11g中,角色的口令略有修正,当某个角色是拥有口令的话,当你将带有口令的角色 grant 给某个用户的话,那么默认的情况
  
   
下,这个带口令的角色下的所有权限,用户是无法拥有的,只有当 set 那个拥有口令的角色后,那么 ,带口令的
               角色下的权限才在当前会话下才可以使用,不过,其他的角色都暂时失效,修改只在当前会话有效。
  

   DSC0000.jpg

  

语法:              ------只在当前会话有效
SET ROLE
   { role [ IDENTIFIED BY password ]
[, role [ IDENTIFIED BY password ] ]...
| ALL [ EXCEPT role [, role ]... ]
| NONE
} ;

  
   DSC0001.jpg

  oracle 10g 中测试带口令的角色
  

  SYS@ORCL>select * from v$version;



BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE  10.2.0.1.0   Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production




  1.
创建两个角色 role_01 没有密码  role_02 有密码

  SYS@ORCL>create role role_01;     



Role created.



SYS@ORCL>create role role_02 identified by oracle;



Role created.

2.
赋予角色 role_01 连接、建表权限

SYS@ORCL>grant connect,create table to role_01;



Grant succeeded.

3.
赋予角色 role_02 连接、创建视图权限

SYS@ORCL>grant connect,create view to role_02;



Grant succeeded.

4.
创建测试用户 tyger

SYS@ORCL>create user tyger identified by tyger quota unlimited on users;



User created.

5.
将两个角色赋予tyger

SYS@ORCL>grant role_01,role_02 to tyger;



Grant succeeded.

6.
连接到用户测试

SYS@ORCL>conn tyger/tyger

Connected.

TYGER@ORCL>create table t(x int);



Table created.



TYGER@ORCL>insert into t values(1);



1 row created.



TYGER@ORCL>commit;



Commit complete.



TYGER@ORCL>select * from t;



X

----------

1



TYGER@ORCL>create view view_t as select * from t;



View created.



TYGER@ORCL>select * from tab;



TNAME             TABTYPE CLUSTERID

------------------------------ ------- ----------

VIEW_T             VIEW

T               TABLE

7.
查看当前用户的角色,两个角色的 DEFAULT_ROLE 都为 YES 说明,这两个角色都生效

TYGER@ORCL>desc user_role_privs;

Name                   Null?  Type

----------------------------------------- -------- ----------------------------

USERNAME                      VARCHAR2(30)

GRANTED_ROLE                    VARCHAR2(30)

ADMIN_OPTION                    VARCHAR2(3)

DEFAULT_ROLE                    VARCHAR2(3)

OS_GRANTED                     VARCHAR2(3)



TYGER@ORCL>col username for a10

TYGER@ORCL>col granted_role for a20

TYGER@ORCL>col default_role for a20

TYGER@ORCL>select username,granted_role,default_role from user_role_privs;



USERNAME  GRANTED_ROLE     DEFAULT_ROLE

---------- -------------------- --------------------

TYGER   ROLE_01       YES

TYGER   ROLE_02       YES

8.
查看当前会话具有的权限

TYGER@ORCL>select * from session_privs;



PRIVILEGE

----------------------------------------

CREATE SESSION

CREATE TABLE

CREATE VIEW

9.
set 的应用       ----set 在当前会话中设置角色状态

TYGER@ORCL>set role ROLE_01;



Role set.

10.
查看当前用户的角色,没变化

TYGER@ORCL>select username,granted_role,default_role from user_role_privs;



USERNAME  GRANTED_ROLE     DEFAULT_ROLE

---------- -------------------- --------------------

TYGER   ROLE_01       YES

TYGER   ROLE_02       YES

11.
查看当前会话权限,已经没有 create view 权限, 原因:set role role_01 只有role_01 在当前会话生效

TYGER@ORCL>select * from session_privs;



PRIVILEGE

----------------------------------------

CREATE SESSION

CREATE TABLE



TYGER@ORCL>create view view_2 as select * from t;

create view view_2 as select * from t

*

ERROR at line 1:

ORA-01031: insufficient privileges



12. 同样使 role_02 生效,同时 role_01 失效,不过设置的时候需要我们提供密码,因为我们创建角色时使用了密码

TYGER@ORCL>set role role_02;

set role role_02

*

ERROR at line 1:

ORA-01979: missing or invalid password for role 'ROLE_02'


TYGER@ORCL>set role role_02 identified by oracle;



Role set.

13.
查看当前用户所拥有的权限,还是没变化

TYGER@ORCL>select username,granted_role,default_role from user_role_privs;



USERNAME  GRANTED_ROLE     DEFAULT_ROLE

---------- -------------------- --------------------

TYGER   ROLE_01       YES

TYGER   ROLE_02       YES

14.
查看当前会话的权限,已经没有 create table 权限

TYGER@ORCL>select * from session_privs;



PRIVILEGE

----------------------------------------

CREATE SESSION

CREATE VIEW



TYGER@ORCL>create table t1(x int);

create table t1(x int)

*

ERROR at line 1:

ORA-01031: insufficient privileges


15.
重新登录会话,连接用户 所有权限都恢复原样

TYGER@ORCL>conn tyger/tyger;

Connected.

TYGER@ORCL>select * from session_privs;



PRIVILEGE

----------------------------------------

CREATE SESSION

CREATE TABLE

CREATE VIEW

  

  总结:在oracle 10g 无论角色是否有口令,将角色赋予给用户后,用户具有角色的全部权限。
  oracle 11g 中测试 拥有口令的角色
  [oracle@ora11gr2 ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 19 15:28:13 2014


Copyright (c) 1982, 2009, Oracle. All rights reserved.




Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SYS@ORA11G>select * from v$version;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE  11.2.0.1.0   Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

1.
创建角色 tyger_ro1 无密码  tyger_ro2 有密码
SYS@ORA11G>create role tyger_ro1;


Role created.


SYS@ORA11G>create role tyger_ro2 identified by oracle;


Role created.


SYS@ORA11G>grant connect,create table to tyger_ro1;


Grant succeeded.


SYS@ORA11G>grant connect,create view to tyger_ro2;


Grant succeeded.


SYS@ORA11G>create user tyger identified by tyger quota unlimited on users;


User created.


SYS@ORA11G>grant tyger_ro1,tyger_ro2 to tyger;


Grant succeeded.


SYS@ORA11G>conn tyger/tyger
Connected.
TYGER@ORA11G>create table t(x int);


Table created.


TYGER@ORA11G>insert into t values(1);


1 row created.


TYGER@ORA11G>commit;


Commit complete.

2.
此时就出现问题了,role_02 明明有 create view 而且赋予给了 tyger 为什么这里就没有呢?
TYGER@ORA11G>create view view_t as select * from t;
create view view_t as select * from t
      *
ERROR at line 1:
ORA-01031: insufficient privileges




3.
查看 tyger_ro2 的default_role 为NO  难道 role_02 角色失效???
TYGER@ORA11G>col username for a10
TYGER@ORA11G>col granted_role for a20
TYGER@ORA11G>col default_role for a20
TYGER@ORA11G>select username,granted_role,default_role from user_role_privs;


USERNAME  GRANTED_ROLE     DEFAULT_ROLE
---------- -------------------- --------------------
TYGER   TYGER_RO1      YES
TYGER   TYGER_RO2      NO

4.
再查看当前会话的权限,
果然没有 create view 权限
TYGER@ORA11G>select * from session_privs;


PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE

5.
设置 tyger_ro2 权限生效

TYGER@ORA11G>set role tyger_ro2 identified by oracle;


Role set.

6.
当前用户具有的权限不变

TYGER@ORA11G>select username,granted_role,default_role from user_role_privs;


USERNAME  GRANTED_ROLE     DEFAULT_ROLE
---------- -------------------- --------------------
TYGER   TYGER_RO1      YES
TYGER   TYGER_RO2      NO

7.当前会话用了 create view 权限 却没有了create table 权限
TYGER@ORA11G>select * from session_privs;


PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE VIEW


TYGER@ORA11G>create view view_t as select * from t;


View created.


TYGER@ORA11G>select * from tab;


TNAME             TABTYPE CLUSTERID
------------------------------ ------- ----------
T               TABLE
VIEW_T             VIEW


TYGER@ORA11G>create table t1(x int);
create table t1(x int)
*
ERROR at line 1:
ORA-01031: insufficient privileges


8.
重新登录会话,权限恢复原样


TYGER@ORA11G>conn tyger/tyger
Connected.
TYGER@ORA11G>create table t1(x int);


Table created.


TYGER@ORA11G>select username,granted_role,default_role from user_role_privs;


USERNAME  GRANTED_ROLE     DEFAULT_ROLE
---------- -------------------- --------------------
TYGER   TYGER_RO1      YES
TYGER   TYGER_RO2      NO

  总结:
  在oracle 11g 中,带有口令的角色赋予用户,默认情况下是失效的,当 set role 生效后,其他角色所具有的权限失效, 只在当前会话有效
  

运维网声明 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-254157-1-1.html 上篇帖子: Oracle学习笔记之三字符型及处理方法 下篇帖子: 使用智能优化器提高Oracle的性能极限
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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