首页 > 应用开发 > IT综合 > 权限传递的一点测试!
记得在北京讲课时曾经有学员问到过这个问题,当时没有详细测试,前几天看到pub上又有人提及这类问题,简单的测试了一下,还发现了一些问题。传递出去的对象权限可以cascade回收,而传递出去的系统权限却没有cascade回收!
[@more@]1.对象权限传递测试
C:>sqlplus xys/manager
SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 4月 7 22:55:01 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from tt;
ID NAME
---------- ----------
1 a
2 a
3 "abc"
4 abcd
SQL> grant select on tt to scott with grant option;
grant select on tt to scott with grant option
*
第 1 行出现错误:
ORA-01917: 用户或角色 'SCOTT' 不存在
SQL> @ C:appwchproduct11.1.0db_1RDBMSADMINscott
SQL> connect xys/manager
已连接。
SQL> grant select on tt to scott with grant option;
授权成功。
SQL> connect scott/tiger
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
--这里注意在11g中口令区分大小写
SQL> connect scott/TIGER
已连接。
SQL> grant select on xys.tt to test;
授权成功。
SQL> desc dba_tab_privs
ERROR:
ORA-04043: 对象 "SYS"."DBA_TAB_PRIVS" 不存在
SQL> show user
USER 为 "SCOTT"
SQL> connect xys/manager
已连接。
SQL> select * from dba_tab_privs where TABLE_NAME='TT';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- ---------- ---------- --- ---
SCOTT XYS TT XYS SELECT YES NO
TEST XYS TT SCOTT SELECT NO NO
SQL> connect scott/TIGER
已连接。
--scott可以单独从test中撤销他授予test的关于xys.tt的select权限!
SQL> revoke select on xys.tt from test;
撤销成功。
SQL> connect xys/manager
已连接。
SQL> select * from dba_tab_privs where TABLE_NAME='TT';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- ---------- ---------- --- ---
SCOTT XYS TT XYS SELECT YES NO
SQL> connect scott/TIGER
已连接。
SQL> grant select on xys.tt to test;
授权成功。
--在11g中用户名依然不区分大小写
SQL> CONNECT XYS/MANAGER
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
SQL> CONNECT XYS/manager
已连接。
SQL> select * from dba_tab_privs where TABLE_NAME='TT';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- ---------- ---------- --- ---
SCOTT XYS TT XYS SELECT YES NO
TEST XYS TT SCOTT SELECT NO NO
--注意这里当xys从scott收回了tt表的select权限时,scott自动也收回了他授予test的关于xys.tt表的
select权限;也就是说对象权限进行了cascade撤销!
SQL> revoke select on tt from scott;
撤销成功。
SQL> select * from dba_tab_privs where TABLE_NAME='TT';
未选定行
2.系统权限传递测试
SQL> SHOW USER
USER 为 "XYS"
SQL> grant create session to scott with admin option;
授权成功。
SQL> connect scott/TIGER
已连接。
SQL> grant create session to test;
授权成功。
SQL> connect xys/manager
已连接。
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';
GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
SCOTT CREATE SESSION YES
TEST CREATE SESSION NO
SQL> show user
USER 为 "XYS"
SQL> connec scott/TIGER
已连接。
SQL> revoke create session from test;
撤销成功。
SQL> connect xys/manager
已连接。
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';
GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
SCOTT CREATE SESSION YES
SQL> connec scott/TIGER
已连接。
SQL> grant create session to test;
授权成功。
SQL> connect xys/manager
已连接。
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';
GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
SCOTT CREATE SESSION YES
TEST CREATE SESSION NO
SQL> revoke create session from scott;
撤销成功。
--这里注意当xys从scott中收回了create session系统权限时,scott授予test的create session并没有
从test中被一并收回!这是系统权限传递和对象权限传递的区别!
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';
GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
TEST CREATE SESSION NO
--这里当我们试图让scott从test中收回create session权限时却以外的得到了错误"ORA-01031: 权限不
足",这也确实不难理解,因为此时scott确实没有create session的权限,因此他也没有收回create
session的权限或者说能力,总觉的这里scott有点尴尬,与其说scott尴尬,不如说oracle尴尬;这样设
计是否合理,还是大家来评说吧。
SQL> connect scott/TIGER
已连接。
SQL> revoke create session from test;
revoke create session from test
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1002003/ ,如需转载,请注明出处,否则将追究法律责任。