[转帖]oracle 授权的详细过程_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3698 | 回复: 0   主题: [转帖]oracle 授权的详细过程        下一篇 
derek
注册用户
等级:中校
经验:1550
发帖:209
精华:0
注册:2011-7-21
状态:离线
发送短消息息给derek 加好友    发送短消息息给derek 发消息
发表于: IP:您无权察看 2011-9-2 14:11:43 | [全部帖] [楼主帖] 楼主

    在我们使用oracle时,关系最密切的一个操作就是对新建的用户授予相应的权限;

通常执行授权时的操作为:

Grant xxx to user


收回权限时为

Revoke xxx from user;


从普通使用角度这对于oracle的使用基本满足了,但是如果你想深入了解oracle就必须知道以上的过程到底在后台进行了哪些操作,对其本质有所了解;那么下面我们就对其进行一个详细的说明:

首先我们对session启用跟踪,并且获取相关的trace文件:

grant sysdba to scott
END OF STMT
PARSE #2:c=0,e=1182,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=7996151421
=====================
PARSING IN CURSOR #1 len=117 dep=1 uid=0 ct=2 lid=0 tim=7996153689 hv=877567579 ad='9398b9d8'
insert into sysauth$ (grantee#,privilege#,option$,sequence#) values (:1,:2,decode(:3,0,null,:3),system_grant.nextval)
END OF STMT
PARSE #1:c=0,e=52,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=7996153685
XCTEND rlbk=0, rd_only=1
EXEC #2:c=0,e=54807,p=0,cr=0,cu=2,mis=0,r=0,dep=0,og=1,tim=7996208368
*** 2011-09-01 10:12:54.684
XCTEND rlbk=0, rd_only=1
=====================
PARSING IN CURSOR #1 len=24 dep=0 uid=0 ct=18 lid=0 tim=8007678124 hv=526852247 ad='9e7377fc'
revoke sysdba from scott
END OF STMT
PARSE #1:c=0,e=1273,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=8007678120
=====================
PARSING IN CURSOR #2 len=56 dep=1 uid=0 ct=7 lid=0 tim=8007680454 hv=890661608 ad='9398addc'
delete from sysauth$ where grantee#=:1 and privilege#=:2
END OF STMT
PARSE #2:c=0,e=69,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=8007680450
XCTEND rlbk=0, rd_only=1
EXEC #1:c=15600,e=36672,p=0,cr=0,cu=2,mis=0,r=0,dep=0,og=1,tim=8007716994


那么我们可以看当对某个用户进行授权时,oracle会在其基表:sysauth$上插入相关的数据,那么sysauth$基表的是什么含义呢:

sys@192.168.0.123:ORCL>desc sysauth$


名称                                     是否为空?类型

 ----------------------------------------- -------- -------
 GRANTEE#                                 NOT NULL NUMBER
 PRIVILEGE#                               NOT NULL NUMBER
 SEQUENCE#                                NOT NULL NUMBER
 OPTION$                                           NUMBER


说明如下:

  grantee#     number not null,         
 privilege#   number not null,          
 sequence#    number not null,        
 option$      number                


 在没有对scott用户授权时,查看sysauth$内容

sys@192.168.0.123:ORCL>select * from sysauth$ m where m.grantee#=54;
GRANTEE# PRIVILEGE# SEQUENCE#   OPTION$
---------- ---------- ---------- ----------
54         2       836
54         3       837
54        68      1053


 当对其授权后:

sys@192.168.0.123:ORCL>select * from sysauth$ m where m.grantee#=54;
GRANTEE# PRIVILEGE# SEQUENCE#   OPTION$
---------- ---------- ---------- ----------
54         2       836
54         3       837
54        68      1053
54         4      1097
54       -15      1098


 那么4和-15代表的是什么权限呢,在此说明一下:

4-- 'GRANT'
-15-- 'UNLIMITED TABLESPACE'


 查看用户权限:

sys@192.168.0.123:ORCL>col grantee format a15
sys@192.168.0.123:ORCL>col privilege format a20
sys@192.168.0.123:ORCL>select * from dba_sys_privs n where n.grantee='SCOTT';
GRANTEE        PRIVILEGE           ADMIN_
--------------- -------------------- ------
SCOTT          UNLIMITED TABLESPACE NO
sys@192.168.0.123:ORCL>select * from dba_role_privs i where i.grantee='SCOTT';
GRANTEE        GRANTED_RO ADMIN_ DEFAUL
--------------- ---------- ------ ------
SCOTT          RESOURCE  NO    YES
SCOTT          DBA       NO    YES
SCOTT          PLUSTRACE NO    YES
SCOTT          CONNECT   NO    YES


注意:此时你可能发现为什么没有具体的grant权限呢,这是因为dba是一个角色,grant权限已经包含在其内,在sysauth$是授权dba时,只增加两条记录是因为其他的权限已经存在了;

我们回收scott的dba权限:

sys@192.168.0.123:ORCL>revoke dba from scott;


撤销成功。

发现相关的权限已经丢失:

sys@192.168.0.123:ORCL>select * from dba_sys_privs n where n.grantee='SCOTT';


未选定行

    接下来我们对scott直接授权而不使用grant语句:

sys@192.168.0.123:ORCL>insert into sysauth$ (grantee#,privilege#,option$,sequence#)
2        values (54,4,null,system_grant.nextval);


已创建1行。

sys@192.168.0.123:ORCL>insert into sysauth$ (grantee#,privilege#,option$,sequence#)
2        values (54,-15,null,system_grant.nextval);


已创建1行。

sys@192.168.0.123:ORCL>select * from dba_sys_privs n where n.grantee='SCOTT';
GRANTEE        PRIVILEGE           ADMIN_
--------------- -------------------- ------
SCOTT          UNLIMITED TABLESPACE NO


权限回来了;

当你看到这些会想到什么呢;




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论