系统权限
表示对表和表空间等   有无操作权  的权限。一般是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. SQL SERVER 2005允许自定义聚合函数-表中字符串分组连接

    不多说了,说明后面是完整的代码,用来将字符串型的字段的各行的值拼成一个大字符串,也就是通常所说的Concat 例如有如下表dict  ID  NAME  CATEGORY  1 RED  COLOR  ...

  2. 【转】谈“P=NP?”

    “P=NP?” 通常被认为是计算机科学最重要的问题.有一个叫Clay Math的研究所,甚至悬赏 100 万美元给解决它的人.可是我今天要告诉你的是,这个问题其实是不存在的,它根本不需要解决. 我并不 ...

  3. Go 语言官方包函数中文翻译

    Go官方包函数中文翻译 *** import "strings" func Join(a []string, sep string) string Join concatenate ...

  4. hive sql 修改列名

    ALTER TABLE dev.dev_jypt_jiadian_cate3_pred_20181109 CHANGE utem_third_cate_name item_third_cate_nam ...

  5. Smarty中{literal}的使用详解(ecshop)

    如何在文件里加入JS代码,如果按一般平常添加方法,会出错,解决的方法:把script套在{literal}{/literal}之间试试看,例如:{literal} {/literal} ------- ...

  6. oracle递归层级查询 start with connect by prior

    递归层级查询:start with connect by prior  以部门表作为解析 表结构:dept{id:'主键',name:'部门名称',parent_id:'父亲id'} select * ...

  7. Spring Cloud构建微服务架构(三)断路器

    在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待.这样就不会使得线程因 ...

  8. QThread 实用技巧、误区----但文档中没有提到

    本文主要内容: 在任务一中,用 四 种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个Label上.1. 用不正确的方式得到看似正确的结果2. 用Qt Manual 和 例子中使用的方法3. ...

  9. [svc]caffe安装笔记

    以前是word排版,加上没有些技术博客经验,相当的糟心. 现在想改,发现博文太多,找不到对应在那一页了,所以老的博文留着吧. caffe,这是是数据组需要做一些大数据模型的训练(深度学习), 要求 服 ...

  10. [100]linux输入输出重定向

    一目了然版本: &号含义: 参考 参考:非常经典,值得一看,我是在linux爱好者公众号里发现的. 下面是我自己的一些总结. linux的命令数据流 在Linux下,当一个用户进程被创建的时候 ...