系统权限
表示对表和表空间等   有无操作权  的权限。一般是SYS用户这种DBA来授权。比如:

grant create session to lisi
grant create table to lisi
grant unlimited tablespace lisi

对象权限
表示对 表和视图的非拥有者 赋予表和视图的使用权 的权限。一般是由表和视图的拥有者来授权。比如:
A用户可以将表tableA的权限赋予给B用户

grant select on tableA to B
gant all on tableA to B

实例:现在有俩用户 lisi 和 wangwu,为用户wangwu创建表并插入数据。

wangwu:

SQL> create table wangtab(id int);
表已创建。 SQL> insert into wangtab values(1);
已创建 1 行。 SQL> select * from wangtab; ID
----------
1

lisi访问wangtab表示访问自己创建的wangtab[实际上lisi没有wangtab这张表]

SQL> select * from wangtab;
select * from wangtab
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

表示lisi用户没有wangtab这张表

lisi访问wangwu已创建的wangtab

SQL> select * from wangwu.wangtab;
select * from wangwu.wangtab
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

还是报错,这是由于当前用户lisi没有访问这张表的权限。
在oracle中,各个用户的对象是隔离开的,oracle用户间默认不能访问彼此的数据,需要通过对象拥有者的授权。

SYS用户有访问oracle所有表的权限,下面我们再来看一下SYS用户能否访问wangtab

SQL> select * from wangwu.wangtab;
未选定行

这是因为wangwu在插入数据后没有执行数据的提交。

在oracle数据库中,用户在执行  新增 修改 删除数据后,需要执行提交才能将数据保存到数据库中。

wangwu:

SQL> commit;
提交完成。

这时sys再次访问就成功了

SQL> select * from wangwu.wangtab;

        ID
----------
1

下面我们用wangwu帐号登录并赋予lisi操作表wangtab的权限

//授予查询权限
SQL> grant select on wangwu.wangtab to lisi;
授权成功。

lisi:

SQL> select * from wangwu.wangtab;

        ID
----------
1
SQL> insert into wangwu.wangtab values(2);
insert into wangwu.wangtab values(2)
*
第 1 行出现错误:
ORA-01031: 权限不足 SQL> grant insert on wangwu.wangtab to lisi;
授权成功。 SQL> insert into wangwu.wangtab values(2);
已创建 1 行。

给lisi操作wangtab表的所有操作权限

SQL> grant all on wangwu.wangtab to lisi;
授权成功。 SQL> update wangwu.wangtab set id=3 where id=2;
已更新 1 行。 SQL> select id from wangwu.wangtab;
ID
----------
1
3

回收所有权限

SQL> revoke all on wangwu.wangtab from lisi;
撤销成功。 SQL> select id from wangwu.wangtab;
select id from wangwu.wangtab
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

赋予所有的操作我们使用关键字all,那么赋予所有的操作给所有的用户又是怎样的命令呢?

将创建表的权限赋予给所有人
SQL> grant create any table to public;
授权成功。 将所有操作赋予所有人
SQL> grant all on wangwu.wangtab to public;
授权成功。

撤销所有人对wangtab操作的所有权限

SQL> revoke all on wangtab from public;
撤销成功。

修改表结构

修改表结构
SQL> alter table wangtab add name varchar2(10);
表已更改。 SQL> select * from wangtab; ID NAME
---------- ----------
1
3
SQL> update wangtab set name='yeqing';
已更新2行。 SQL> select * from wangtab;
ID NAME
---------- ----------
1 yeqing
3 yeqing SQL> commit;
提交完成。

在oracle中,还可以对表的某一列赋予insert和update的权限。即:对象权限可以控制到列。但是需要注意的是:查询和删除不能控制到列,查询和删除的操作是针对行的。

SQL> revoke all on wangtab from lisi;
撤销成功。 SQL> grant update(name) on wangtab to lisi;
授权成功。 SQL> grant insert(name) on wangtab to lisi;
授权成功。 SQL> update wangwu.wangtab set name='hehe' where id=1;
已更新 1 行。 SQL> update wangwu.wangtab set name='hehe',id=5 where id=1;
update wangwu.wangtab set name='hehe',id=5 where id=1
*
第 1 行出现错误:
ORA-01031: 权限不足 SQL> insert into wangwu.wangtab values(4,'hehehe');
insert into wangwu.wangtab values(4,'hehehe')
*
第 1 行出现错误:
ORA-01031: 权限不足

拓展:三个系统视图

① user_sys_privs   存储用户系统权限的视图

② user_tab_privs   存储用户对象权限的视图[表]

③ user_col_privs    存储用户对象权限的视图[列]

实例:

1、查看当前用户lisi的系统权限

SQL> select *  from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
PUBLIC CREATE ANY TABLE NO
LISI CREATE SESSION NO
LISI CREATE TABLE NO
LISI UNLIMITED TABLESPACE NO

2、查看当前用户lisi的对象权限

SQL> set linesize 400
SQL> select * from user_tab_privs; GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
LISI WANGWU WANGTAB WANGWU FLASHBACK NO NO
LISI WANGWU WANGTAB WANGWU DEBUG NO NO
LISI WANGWU WANGTAB WANGWU QUERY REWRITE NO NO
LISI WANGWU WANGTAB WANGWU ON COMMIT REFRESH NO NO
LISI WANGWU WANGTAB WANGWU REFERENCES NO NO
LISI WANGWU WANGTAB WANGWU UPDATE NO NO
LISI WANGWU WANGTAB WANGWU SELECT NO NO
LISI WANGWU WANGTAB WANGWU INSERT NO NO
LISI WANGWU WANGTAB WANGWU INDEX NO NO
LISI WANGWU WANGTAB WANGWU DELETE NO NO
LISI WANGWU WANGTAB WANGWU ALTER NO NO

3、查看lisi用户的列操作权限

SQL> select * from user_col_privs;

GRANTEE                        OWNER                          TABLE_NAME                     COLUMN_NAME                    GRANTOR                        PRIVILEGE                                GRA
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- ---
LISI WANGWU WANGTAB NAME WANGWU UPDATE NO
LISI WANGWU WANGTAB NAME WANGWU INSERT NO
LISI WANGWU WANGTAB ID WANGWU INSERT NO

[oracle] 两种权限:系统权限VS对象权限的更多相关文章

  1. mybatis oracle两种方式批量插入数据

    mybatis oracle两种方式批量插入数据 注意insert,一定要添加: useGeneratedKeys="false" ,否者会报错. <insert id=&q ...

  2. 可采用两种方法得到一个EJB对象

    (本文是转载其他人的技术文章,觉得说得挺浅显易懂,特借来学习)     在前面学习的例子中,只有一个EJB,但是对于一个真实的项目,EJB的数量可以有很多,而且EJB之间也会互相调用,那么在一个EJB ...

  3. oracle两种分页查询

    第一种: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM table_name) A ) ; 第二种: SELECT * FROM ( ...

  4. Oracle两种临时表的创建与使用详解

    ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交comm ...

  5. scrapy爬虫提取网页链接的两种方法以及构造HtmlResponse对象的方式

    Response对象的几点说明: Response对象用来描述一个HTTP响应,Response只是一个基类,根据相应的不同有如下子类: TextResponse,HtmlResponse,XmlRe ...

  6. oracle两种导出导入方式,即imp与impdp之比较

    尽管使用了很多次impexp及impdpexpdp但是使用起来还是会遇到很多问题,现总结如下: 应用:将一个用户的所有表结构及索引,触发器,过程,函数等导入到另一用户里 imp/exp 导出用户表结构 ...

  7. Oracle系统权限与对象权限

    oracle权限分为: 系统权限: 允许用户执行特定的数据库动作,如创建表.创建索引.连接实例等. 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列.执行存储过程等. 系统权限 超过一 ...

  8. Oracle 用户、对象权限、系统权限

    --================================ --Oracle 用户.对象权限.系统权限 --================================  一.用户与模式 ...

  9. Oracle笔记之对象权限与系统权限总结

    对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录     sqlplus sys/on_change_install as sysdba; 创 ...

随机推荐

  1. FA_会计中的折旧方式的种类(概念)

    2014-06-08 Created By BaoXinjian

  2. Python atan() 函数

    描述 atan() 返回x的反正切弧度值. 语法 以下是 atan() 方法的语法: import math math.atan(x) 注意:atan()是不能直接访问的,需要导入 math 模块,然 ...

  3. JAVA多线程和并发基础面试问答【转】

    JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰 ...

  4. 给openvpn客户分配固定ip地址

    虽然openvpn提供dhcp服务,但是dhcp是有租约的,到期后会重新分配ip,造成连接中断的问题,所以最好还是给客户端固定一个ip. 思路:开启客户端配置目录,然后为每一个客户建一个配置文件,里面 ...

  5. 【Android】11.2 通过重写对应的方法保存和恢复实例的状态

    分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 通过重写(也叫回调)对应的方法来管理Activity的生命周期,比如用户旋转屏幕时应用程序要能自动保存和恢复实例的 ...

  6. 【Android】7.8 MyDemos项目的结构和主界面相关代码

    分类:C#.Android.VS2015: 创建日期:2016-02-17 一.简介 上一讲已经说过,系统升级为Win10后,重新创建了一个新的项目:MyDemos,并把前7章合并到了这个项目中,这次 ...

  7. 【Android】5.0 第5章 常用基本控件--本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-06 这一章主要介绍Android简单控件的基本用法.本章源程序共有9个示例,这些示例都在同一个项目中. 项目名:ch05demo ...

  8. Python标准库:内置函数getattr(object, name[, default])

    本函数实现获取对象object的属性.属性由name来表示,就是属性名称的字符串.參数default是可选的參数,当获取对象的属性不存在时,就返回此值.假设没有提供此參数.同一时候在对象属性里也找不到 ...

  9. Query图像滑块插件 (支持触摸/滑动手势)

    1.http://bxslider.com/ 2.http://www.slidesjs.com/ (http://www.html5cn.org/article-6437-1.html很多歌)

  10. asp.net 获取客户端IP

    一.名词 首先说一下接下来要讲到的一些名词. 在Web开发中,我们大多都习惯使用HTTP请求头中的某些属性来获取客户端的IP地址,常见的属性是REMOTE_ADDR.HTTP_VIA和HTTP_X_F ...