系统权限
表示对表和表空间等   有无操作权  的权限。一般是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. pycurl 学习笔记--getinfo 函数

    通过 pycurl.Curl 对象的 getinfo 函数,可以获取到响应的如下信息: (参考: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.htm ...

  2. AME_IExpense费用报表通过AME审批简单例子(案例)

    2014-05-30 Created By BaoXinjian

  3. GO1.6语言学习笔记2-安装配置及代码组织

    一.关于GO开发环境的安装和配置        在linux环境中安装编译好的go安装包,参考官方指南的步骤一步步走下来就可以了.需要注意的是以下几个环境变量的配置:        GOROOT - ...

  4. jquery.dataTables的用法

    写页面前端时,使用表格的插件可以快速漂亮的排版.本例子中使用jquery.dataTables来处理table.直接来点干货 html代码如下 <table cellpadding=" ...

  5. html中一些常用标签及属性

    html中标签分为块级标签和行级标签 块级标签常用的有 <div> <p> <h1><hr><pre><table><ul ...

  6. Qt解析xml

    发现用 Qt 解析 xml 文件非常方便,下面是一个简单的解析 xml 文件的例子: #include <QtCore/QCoreApplication> #include <QDo ...

  7. iOS 碰撞检測以及事件响应

    */ //碰撞检測 //碰撞检測de过程 //碰撞检測 //碰撞检測 //碰撞检測 //UIApplication-> UIWindow-> UIController-> 视图控制器 ...

  8. Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar

    我们使用Spring Boot 2.0 创建好我们的项目后,我们一般需要打包,然后部署到服务器上. 打包步骤: 1. 选中项目,右键——> Open Module Settings. 2. 切换 ...

  9. python 使用py2exe将python 脚本生成exe可执行文件

    使用python的py2exe模块可以很容易地帮助我们将python脚本生成可执行的exe程序.这样我们就可以让脚本脱离虚拟机的束缚,从而独立运行. 首先安装py2exe分解步骤如下:(pip和eas ...

  10. 解决Ubuntu16的风扇高速旋转问题(双显卡)

    问题描述 自从我的双显卡的笔记本装上Ubuntu 14 后,风扇狂转.发热巨大.网上一搜索估计是显卡驱动不太行.最近英伟达的Nvidia Prime可以完美地切换双显卡,安装这个软件后,风扇就不会狂转 ...