`

系统权限与对象权限的revoke机制比较

阅读更多

下面谈谈关于系统权限与对象权限的revoke 差别。

1 、系统权限的撤销:

收回系统权限时,没有级联效果。什么是级联效果呢?就是当我(sys )将某一系统权限(create table )授予给用户test1 后(使用with admin option ,这样的话test1 可以将此权限再授予第三个用户),test1 又将此权限授予给第三者(test2 ),这不同于sys 直接对test2 授予create table 。当我们收回test1create table 权限时,test1 以前创建的表仍然存在,但无法创建新表,而test 仍然用于create table 的权限。下面来看看这个过程:

创建用户test1 ,并授予基本的权限,然后授予将权限create table 授予给其他用户的with admin option 权限。

SQL> create user test1 identified by test1 default tablespace data;

用户已创建

SQL> grant create session,unlimited tablespace to test1;

授权成功。

SQL> grant create table to test1 with admin option;

授权成功。

SQL> create user test2 identified by test2 default tablespace data;

用户已创建

SQL> grant create session,unlimited tablespace to test2;

授权成功。

SQL> conn test1/test1@company;

已连接。

SQL> create table t1(id number);

表已创建。

SQL> grant create table to test2;

授权成功。

SQL> conn test2/test2@company;

已连接。

SQL> create table t2(id number);

表已创建。

SQL> conn sys/oracle@company as sysdba

已连接。

SQL> revoke create table from test1;

撤销成功。

SQL> conn test1/test1@company;

已连接。

SQL> select table_name from user_tables;

TABLE_NAME                                                                     

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

T1                                                                             

SQL> create table t3(id number);

create table t3(id number)

*

ERROR 位于第 1 :

ORA-01031: insufficient privileges

SQL> insert into t1 values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from session_privs;

PRIVILEGE                                                                      

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

CREATE SESSION                                                                  

UNLIMITED TABLESPACE     

SQL> conn test2/test2@company;

已连接。

SQL> select table_name from user_tables;

TABLE_NAME                                                                     

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

T2                                                                             

SQL> create table t4 as select * from t2;

表已创建。

SQL> insert into t2 values(1);

已创建 1 行。

SQL> select * from session_privs;

PRIVILEGE                                                                       

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

CREATE SESSION                                                                 

UNLIMITED TABLESPACE                                                            

CREATE TABLE                                                                   

 

总结:系统权限的回收不存在级联关系,只能回收直接授权的。                                               

 

2 、对象权限的撤销:

   回收对象权限时,存在级联操作。先看过程:

SQL> show user;

USER "TEST1"

SQL> conn sys/oracle@company as sysdba

已连接。

SQL> grant dba to scott;

授权成功。

SQL> conn scott/tiger@company;

已连接。                                                                

SQL> select count(*) from test_pk;

  COUNT(*)                                                                     

----------                                                                      

      1000                                                                     

SQL> grant select on test_pk to test1 with admin option;

grant select on test_pk to test1 with admin option

                                      *

ERROR 位于第 1 :

ORA-00993: missing GRANT keyword

注意此处与系统权限不一样!系统权限是with admin option

对象权限是with grant option

SQL> grant select on test_pk to test1 with grant option;

授权成功。

SQL> conn test1/test1@company;

已连接。

SQL> select count(*) from scott.test_pk;

  COUNT(*)                                                                      

----------                                                                     

      1000                                                                     

SQL> conn test2/test2@company;

已连接。

SQL> select count(*) from scott.test_pk;

select count(*) from scott.test_pk

                           *

ERROR 位于第 1 :

ORA-00942: table or view does not exist    ————此时还没有授权,报错正常。

test1test2 授予查看scott.test_pk 的权限。

SQL> conn test1/test1@company;

已连接。

SQL> grant select on scott.test_pk to test2;

授权成功。

SQL> conn test2/test2@company;

已连接。

SQL> select count(*) from scott.test_pk;

  COUNT(*)                                                                     

----------                                                                      

      1000                                                                     

SQL> conn scott/tiger@company;

已连接。

SQL> revoke select on test_pk from test1;

撤销成功。

SQL> conn test1/test1@company;

已连接。

SQL> select count(*) from test1;

select count(*) from test1

                     *

ERROR 位于第 1 :

ORA-00942: table or view does not exist     ----- 这个权限已经回收,所以报错!

SQL> conn test2/test2@company;

已连接。

SQL> select count(*) from scott.test_pk;

select count(*) from scott.test_pk

                            *

ERROR 位于第 1 :

ORA-00942: table or view does not exist     ----- 这个权限也被级联回收,所以报错!

SQL> select * from v$version;

BANNER                                                                         

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

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production                     

PL/SQL Release 9.2.0.4.0 - Production                                          

CORE  9.2.0.3.0   Production                                                       

TNS for Linux: Version 9.2.0.4.0 - Production                                  

NLSRTL Version 9.2.0.4.0 - Production           

 

总结:在回收对象权限时,存在级联回收!也就是说如果用户scott 将查看test_pk 表的权限授予给test1 用户,并且授予其可以再将此权限授予给其他用户的权限,也就是with grant option 。此时test1 将查看test_pk 表的权限授予给test2 用户。当scott 回收test1 查看test_pk 表的权限时,test2 查看test_pk 表的权限同时被回收。
分享到:
评论

相关推荐

    oracle数据库的权限系统分为系统权限与对象权限

    该系统分为系统权限和对象权限两大类。 系统权限(Database System Privilege) --------------------------- 系统权限是指可以让用户执行特定的命令集的权限。例如,create table权限允许用户创建表,grant any ...

    Greenplum数据库权限管理1

    在Greenplum数据库管理系统中,权限管理是确保数据安全性和访问控制的重要机制。它允许管理员精确地控制不同用户和角色对数据库对象的访问权限,从而防止未经授权的数据访问或修改。 1.1 概述 Greenplum的权限系统...

    oracle数据库权限管理

    2. **对象权限**:与系统权限不同,对象权限允许用户对特定数据库对象进行操作,例如读取(SELECT)、插入(INSERT)、更新(UPDATE)、删除(DELETE)表中的数据,或者创建索引(CREATE INDEX)等。对象权限只能在...

    权限管理系统数据库设计

    在SQL Server 2005中,还可以利用内置的权限控制机制,如GRANT、DENY和REVOKE语句,直接为用户或角色授予、拒绝或撤销权限。此外,可以使用存储过程和触发器来增强权限管理的安全性和复杂性,例如,通过触发器确保...

    权限管理系统

    例如,我们可以使用GRANT和REVOKE语句来分配和撤销用户对数据库对象的访问权限。 四、设计模式与最佳实践 1. 角色-基于的角色的访问控制(RBAC):这是最常见的权限管理模式,用户通过角色获取权限。在Java中,...

    权限控制系统.7z权限控制系统.7z

    5. 数据库权限控制:如SQL的GRANT和REVOKE语句,用于控制对数据库对象的访问。 总结,权限控制系统是保障信息系统安全的核心机制,通过科学的权限分配和严格的访问控制,实现用户行为的规范和数据保护。理解并掌握...

    oracle中的权限

    在Oracle数据库系统中,权限管理是确保数据安全性与完整性的重要机制。权限的分配与管理是数据库管理员(DBA)和系统管理员的核心职责之一。本文将深入探讨Oracle中的权限概念、类型以及如何进行权限的授予与回收。 ...

    10 oracle管理权限和角色 PPT

    在Oracle中,权限和角色的概念是为用户提供访问控制机制,允许管理员精细地控制用户对数据库对象的访问权限,同时简化权限的分配过程。 1. 权限(Privileges):权限是Oracle中允许用户执行特定操作的能力。例如,...

    oracle-用户与权限的管理

    Oracle中的权限分为系统权限和对象权限两大类。 ##### 系统权限 系统权限控制用户对整个数据库系统功能的访问,如创建表、连接数据库等。例如,`CREATE SESSION`权限允许用户连接到数据库,而`CREATE TABLE`则允许...

    管理Oracle的用户权限PPT学习教案.pptx

    总之,管理Oracle的用户权限是一个复杂但关键的任务,涉及到系统和对象权限的分配、撤销以及审计机制的配置。通过精细的权限管理和角色设定,DBA可以确保数据的安全性,同时满足不同用户和角色的访问需求。

    OceanBase SQL权限控制.docx

    权限是 OceanBase 数据库中的访问控制机制,用于控制用户对数据库对象的访问权限。 OceanBase SQL 权限控制提供了多种权限管理语句,例如: * 授予权限:使用 `GRANT` 语句可以授予用户权限。 * 撤回权限:使用 `...

    oracle权限管理基础

    在Oracle数据库中,权限分为两种类型:系统权限和对象权限。系统权限涉及到对全局数据库操作的授权,如创建表、备份数据库或管理其他用户等。对象权限则针对特定数据库对象,如读取、更新、删除表中的数据。权限可以...

    Oracle权限

    权限主要包括系统权限(SYS PRIVILEGES)和对象权限(OBJECT PRIVILEGES)。系统权限允许用户执行特定的操作,如创建表、索引等;而对象权限则允许用户对特定的对象(如表、视图)执行操作。 #### 二、Oracle预定义...

    创建MySQL用户赋予某指定库表的权限[文].pdf

    MySQL 是一个广泛使用的关系型数据库管理系统,用户权限管理是 MySQL 安全性的关键组件之一。创建 MySQL 用户并赋予某指定库表的权限是 MySQL 安全性配置的重要步骤。本文将详细介绍 MySQL 用户权限管理和授权的相关...

    oracle权限管理

    它分为两种类型:系统权限和对象权限。 ##### 1、系统权限 系统权限指的是执行特定类型SQL命令的权利,例如创建表、创建视图等操作。系统权限用于控制用户可以执行哪些数据库操作。 **A、系统权限的介绍** ...

    Oracle权限管理.doc

    在Oracle中,权限管理主要分为系统权限和对象权限两大类,通过这两类权限,管理员可以精细地控制用户对数据库资源的访问。 系统权限涉及到数据库操作的全局权限,如创建会话(CREATE SESSION)、创建表(CREATE ...

    oracle权限详解

    根据提供的文件内容,本文将详细解释Oracle数据库中的权限管理机制,包括系统权限、对象权限以及相关的操作命令。Oracle权限管理是数据库安全性的重要组成部分,通过合理分配权限可以有效地控制用户对数据库资源的...

    oracle权限全集

    - **对象权限**:针对特定对象(如表、视图、序列、索引、存储过程等)的操作权限,如SELECT、INSERT、UPDATE、DELETE、EXECUTE等。 - **系统权限**:对全局数据库操作的权限,如CREATE TABLE、ALTER USER、CREATE...

    JAVA MYSQL 权限分配技术

    在MySQL中,我们可以使用内置的用户管理和权限系统来进行这两步操作,例如通过`CREATE USER`、`GRANT`、`REVOKE`等SQL命令来创建用户并分配或回收权限。 描述中提到的“用户表”用于存储用户信息,包括用户名、密码...

Global site tag (gtag.js) - Google Analytics