Oracle PL/SQL之对象权限与系统权限的撤销差异

对象权限测试:
初始状态下,user2和user3都没有user1.t1的对象权限
user1下存在t1表:
duzz$user1@orcl>select * from t1;

        C1
----------
      1111

Elapsed: 00:00:00.00

user2不能查询user1.t1:
duzz$user2@orcl>select * from user1.t1;
select * from user1.t1
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


Elapsed: 00:00:00.00

user3不能查询user1.t1:
duzz$user3@orcl>select * from user1.t1;
select * from user1.t1
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


Elapsed: 00:00:00.01

user1赋予user2在t1上的对象权限,同时允许user2将该权限赋予别的用户:
duzz$user1@orcl>grant all on t1 to user2 with grant option;

Grant succeeded.

Elapsed: 00:00:00.00

user2已经可以查询user1.t1,同时user2将user1.t1的对象权限赋予user3:
duzz$user2@orcl>select * from user1.t1;

        C1
----------
      1111

Elapsed: 00:00:00.00
duzz$user2@orcl>grant all on user1.t1 to user3;

Grant succeeded.

Elapsed: 00:00:00.00
duzz$user2@orcl>

user3也可以查询user1.t1了:
duzz$user3@orcl>select * from user1.t1;

        C1
----------
      1111

Elapsed: 00:00:00.00

user1尝试直接从user3那里回收权限,执行语句虽然没有报错,但是并没有实际作用:
duzz$user1@orcl>revoke all on t1 from user3;

Revoke succeeded.

Elapsed: 00:00:00.00

user3仍然能够查询user1.t1:
duzz$user3@orcl>select * from user1.t1;

        C1
----------
      1111

Elapsed: 00:00:00.00

user1这次开始从user2那里回收权限,
duzz$user1@orcl>revoke all on t1 from user2;

Revoke succeeded.

Elapsed: 00:00:00.01

user2权限被收回:
duzz$user2@orcl>select * from user1.t1;
select * from user1.t1
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


Elapsed: 00:00:00.01

与此同时,user3的权限也被收回:
duzz$user3@orcl>select * from user1.t1;
select * from user1.t1
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


Elapsed: 00:00:00.01

对于对象权限,虽然不能从非直接授予的用户回收,但是回收具有级联性。


系统权限测试:
user1具有CREATE VIEW的系统权限,同时该权限可以grant给别的用户,user2和user3则没有该权限:
duzz$user1@orcl>select * from session_privs;

PRIVILEGE
---------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW

Elapsed: 00:00:00.00

user2没有CREATE VIEW的系统权限:
duzz$user2@orcl>select * from session_privs;

PRIVILEGE
------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Elapsed: 00:00:00.01

user3也没有CREATE VIEW的系统权限:
duzz$user3@orcl>select * from session_privs;

PRIVILEGE
------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Elapsed: 00:00:00.01

user1将CREATE VIEW的权限赋予user2,同时赋予user2可以将该权限赋予其它用户的权限:
duzz$user1@orcl>grant create view to user2 with admin option;

Grant succeeded.

Elapsed: 00:00:00.01

user2获得CREATE VIEW的权限:
duzz$user2@orcl>select * from session_privs;

PRIVILEGE
-------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW

Elapsed: 00:00:00.00


user2将CREATE VIEW的权限赋予user3:
duzz$user2@orcl>grant create view to user3;

Grant succeeded.

Elapsed: 00:00:00.00

user3获得CREATE VIEW的权限:
duzz$user3@orcl>select * from session_privs;

PRIVILEGE
--------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW

Elapsed: 00:00:00.01

不同于对象权限,系统权限可以直接从非直接授予的用户上收回。
user1尝试直接从user3上回收CREATE VIEW的权限:
duzz$user1@orcl>revoke create view from user3;

Revoke succeeded.

Elapsed: 00:00:00.01

user3的CREATE VIEW的权限被收回:
duzz$user3@orcl>select * from session_privs;

PRIVILEGE
---------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Elapsed: 00:00:00.01

测试系统权限是不是也像对象权限一样具有撤销级联性。
user2再次将CREATE VIEW的权限赋予user3:
duzz$user2@orcl>grant create view to user3;

Grant succeeded.

Elapsed: 00:00:00.01

user1收回user2的CREATE VIEW的权限:
duzz$user1@orcl>revoke create view from user2;

Revoke succeeded.

Elapsed: 00:00:00.00

user2的CREATE VIEW的权限被收回:
duzz$user2@orcl>select * from session_privs;

PRIVILEGE
------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Elapsed: 00:00:00.00

不过,user3仍然拥有CREATE VIEW的权限:
duzz$user3@orcl>select * from session_privs;

PRIVILEGE
-------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW

Elapsed: 00:00:00.00

对于系统权限,可以从非直接授予的用户收回权限,但是不具备回收级联性。


总结:
对于对象权限,虽然不能从非直接授予的用户回收,但是回收具有级联性。
对于系统权限,可以从非直接授予的用户收回权限,但是不具备回收级联性。

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PL/SQLORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。   PL/SQL的优点   从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。   PL/SQL的优点如下:   . PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。   . PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型   . PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。   . 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。   . PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的   . 对于SQLORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。   PL/SQL块结构   PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分:   声明部分(Declaration section)   声明部分包含了变量和常量的数据类型和初始值。这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值