[oracle] 两种权限:系统权限VS对象权限
系统权限
表示对表和表空间等 有无操作权 的权限。一般是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对象权限的更多相关文章
- mybatis oracle两种方式批量插入数据
mybatis oracle两种方式批量插入数据 注意insert,一定要添加: useGeneratedKeys="false" ,否者会报错. <insert id=&q ...
- 可采用两种方法得到一个EJB对象
(本文是转载其他人的技术文章,觉得说得挺浅显易懂,特借来学习) 在前面学习的例子中,只有一个EJB,但是对于一个真实的项目,EJB的数量可以有很多,而且EJB之间也会互相调用,那么在一个EJB ...
- oracle两种分页查询
第一种: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM table_name) A ) ; 第二种: SELECT * FROM ( ...
- Oracle两种临时表的创建与使用详解
ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交comm ...
- scrapy爬虫提取网页链接的两种方法以及构造HtmlResponse对象的方式
Response对象的几点说明: Response对象用来描述一个HTTP响应,Response只是一个基类,根据相应的不同有如下子类: TextResponse,HtmlResponse,XmlRe ...
- oracle两种导出导入方式,即imp与impdp之比较
尽管使用了很多次impexp及impdpexpdp但是使用起来还是会遇到很多问题,现总结如下: 应用:将一个用户的所有表结构及索引,触发器,过程,函数等导入到另一用户里 imp/exp 导出用户表结构 ...
- Oracle系统权限与对象权限
oracle权限分为: 系统权限: 允许用户执行特定的数据库动作,如创建表.创建索引.连接实例等. 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列.执行存储过程等. 系统权限 超过一 ...
- Oracle 用户、对象权限、系统权限
--================================ --Oracle 用户.对象权限.系统权限 --================================ 一.用户与模式 ...
- Oracle笔记之对象权限与系统权限总结
对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录 sqlplus sys/on_change_install as sysdba; 创 ...
随机推荐
- iOS_21团购_Popover适应iPad横竖屏切换
终于效果图: 代码片段: // // DockItemLocation.m // 帅哥_团购 // // Created by beyond on 14-8-13. // Copyright (c) ...
- JavaScript - 返回头部
制作浮动top $(window).scroll( function() { var scrollValue=$(window).scrollTop(); scrollValue > 600 ? ...
- RTB竞价中的cookie mapping技术
首先通过一些关键词解释普及或者回顾一下背景, ADX: Ad exchange的简称.一般特指Ad exchange平台模块 DMP: Data Management Platform的简称.DMP存 ...
- Java:多线程,线程池,ThreadPoolExecutor详解
1. ThreadPoolExecutor的一个常用的构造方法 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepA ...
- js实现精确统计网站访问量的代码分享
JS 精确统计网站访问量. 代码如下: /** * vlstat 浏览器统计脚本 */ var statIdName = "vlstatId"; var xmlHttp; /** ...
- [na]tftp从linux下载文件
1,背景: 当我们ssh到一台linux上时候,从linux上下载一些文件,方案如下: 1.1通过sftp:通过win7 ftp客户端连接到linux去下载文件. 1.2通过tftp 2,问题 有些l ...
- jQuery推断浏览器是移动端还是电脑端自己主动跳转
一个段小代码.同一个站点针对移动端查看和电脑端查看跳转不同的页面. 首先载入jQuery文件. $(function(){ var MobileUA = (function() { var ua = ...
- 玩转oracle学习第七天
1.上节回想 2.PL/SQL的进阶 3.oracle的视图 4.oracle的触发器 目标: 1.掌握PL/SQL的高级使用方法(能编写分页过程模块,下订单过程模块.. . ) 2.会处理or ...
- [转载] C++的那些事:你真的了解引用吗
我转载了roony的一篇文章 C++的那些事:你真的了解引用吗 以备以后可以查到. 一.引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1.引用就是一个对象的别名. 2.引用不是值不占 ...
- oop klass
https://www.infoq.com/articles/Introduction-to-HotSpot 借助HotSpot SA来一窥PermGen上的对象 找出栈上的指针/引用 虚拟机随谈(一 ...