ITPub博客

首页 > 应用开发 > IT综合 > 权限传递的一点测试!

权限传递的一点测试!

原创 IT综合 作者:warehouse 时间:2008-04-07 23:33:39 0 删除 编辑

记得在北京讲课时曾经有学员问到过这个问题,当时没有详细测试,前几天看到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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    717
  • 访问量
    5366291