涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等

赋予权限:前三个要在管理员权限用户下进行操作

  1. 方法1
  2. grant dba to db_user;--赋予用户数据库管理权限
  3. 方法2
  4. grant connect to db_user;--赋予用户连接权限 注意:在这里,准确的讲,connect不是权限,而是角色。
  5. grant resource to db_user;--赋予用户资源权限
  6. 方法3
  7. grant create session to db_user;--赋予用户创建会话的权限,能够正常登录了
  8. grant resource to db_user;--赋予用户资源权限
  9. 方法4connect db_user/db_user_pw as sysdba或者as sysoper;--连接数据库并赋予权限

管理权限和角色

介绍
这一部分我们主要看看Oracle中如何管理权限和角色,权限和角色的区别在那里。 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统的权限;如果用户要访问其它方案的对象,则必须为其授予对象的权限。为了简化权限的管理,可以使用角色。

系统权限

用户名,权限,角色

在建立用户时,Oracle会把用户的信息存放到数据字典中,当给用户授予权限或是角色时,Oracle会将权限和角色的信息存放到数据字典。

通过查询dba_users可以显示所有数据库用户的详细信息;

通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限;

通过查询数据字典视图dba_tab_privs,可以显示用户具有的对象权限;

通过查询数据字典dba_col_privs可以显示用户具有的列权限;

通过查询数据库字典视图dba_role_privs可以显示用户所具有的角色。

  1. select * from system_privilege_map order by name;--Oracle的所有系统权限,一般是dba
  2. select distinct privilege from user_tab_privs;--显示数据库中用户的对象权限
  3. select * from user_sys_privs;--显示数据库中用户的系统权限
  4. select * from dba_sys_privs where grantee='db_role';--显示数据库中角色的管理员权限
  5. select * from role_sys_privs where role='db_role';--显示数据库中角色的系统权限
  6. select * from dba_tab_privs where grantee='db_role';--显示数据库中角色的对象权限

权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对象权限两种。

系统权限

系统权限介绍

系统权限是指执行特定类型sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。Oracle提供了200多种

系统权限。 常用的有:

  1. create session;--连接数据库
  2. create user;--建用户
  3. create table; --建表
  4. create view; --建视图
  5. create public synonym;--建同义词
  6. create synonym synonym_name for db_user.table_name;
  7. create procedure;--建过程、函数、包 create trigger 建触发器
  8. execute any procedure;--执行任何过程
  9. create cluster;--建簇

显示系统权限

Oracle提供了100多种系统权限,而且Oracle的版本越高,提供的系统权限就越多,我们可以查询数据字典视图

system_privilege_map;--可以显示所有系统权限。

授予系统权限

一般情况,授予系统权限是由dba完成的,如果用其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授给其他用户

回收系统权限

一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成。 当回收了系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联收回的问题?[不是级联回收!]

system --->ken --->tom

conn system/123456;

grant create session to ken with grant option;

conn ken/123456;

grant create session to tom;

用system执行如下操作:

revoke create session from ken; --请思考tom还能登录吗?

答案:能,可以登录

对象权限

对象权限介绍

指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。比如smith用户要访问system.tb_Employee表(system:方案,tb_Employee:表)

常用的有:

alter 修改 delete 删除 select 查询 insert 添加

update 修改 index 索引 references 引用 execute 执行

显示对象权限

通过数据字段视图可以显示用户或是角色所具有的对象权限。视图为dba_tab_privs

conn system/123456;

select distinct privilege from dba_tab_privs;

select grantor, owner, table_name, privilege from dba_tab_privs where grantee='db_role';

1.授予对象权限

在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option)权限,从oracle9i开始,dba用户(sys,system)可以将任何对象上的对象权限授予其它用户。授予对象权限是用grant命令来完成的。 对象权限可以授予用户,角色,和public。在授予权限时,如果带有with grant option选项,则可以将该权限转授给其它用户。但是要注意with grant option选项不能被授予角色。

1.test用户要操作system.tb_Employee表,则必须授予相应的对象权限

1). 希望test可以查询system.tb_Employee表的数据,怎样操作?

grant select on tb_Employee to test;

2). 希望test可以修改system.tb_Employee的表数据,怎样操作?

grant update on tb_Employee to test;

3). 希望test可以删除system.tb_Employee的表数据,怎样操作?

grant delete on tb_Employee to test;

4). 有没有更加简单的方法,一次把所有权限赋给test?

grant all on tb_Employee to test;

2.能否对test访问权限更加精细控制。(授予列权限)

1). 希望test只可以修改system.tb_Employee的表的sal字段,怎样操作?

grant update on tb_Employee(sal) to test;

2).希望test只可以查询system.tb_Employee的表的ename,sal数据,怎样操作?

grant select on tb_Employee(ename,sal) to test;

...

3.授予alter权限

如果test用户要修改system.tb_Employee表的结构,则必须授予alter对象权限

conn system/123456;

grant alter on tb_Employee to test;

当然也可以用sys来完成这件事。

4.授予execute权限

如果用户想要执行其它方案的包/过程/函数,则须有execute权限。比如为了让ken可以执行包dbms_transaction,可以授予execute权限。

conn system/123456;

grant execute on dbms_transaction to ken;

5.授予index权限

如果想在别的方案的表上建立索引,则必须具有index对象权限。如果为了让test可以在system.tb_Employee表上建立索引,就给其index的对象权限

conn system/123456;

grant index on system.tb_Employee to test;

6.使用with grant option选项

该选项用于转授对象权限。但是该选项只能被授予用户,而不能授予角色

conn system/123456;;

grant select on tb_Employee to test with grant option;

conn test/123456;

grant select on system.tb_Employee to jones;

回收对象权限

在oracle9i中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。 这里要说明的是:收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限是否会被级联收回?【级联回收】

如:system--->test--->jones

conn system/123456;

revoke select on tb_Employee from test;

请大家思考,jones能否查询system.tb_Employee表数据。

答案:查不了了(和系统权限不一样,刚好相反)

收回用户系统权限

  1. revoke system_privileges from db_user;

Oracle系列之权限的更多相关文章

  1. .Net程序员学用Oracle系列(2):准备测试环境

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.创建说明 1.1.为什么要创建的测试环境? 1.2.了解 Oracle 实例的默认用户 2.创建环境 2.1.创建基本环境 ...

  2. .Net程序员学用Oracle系列(7):视图、函数、过程、包

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...

  3. .Net程序员学用Oracle系列(8):触发器、任务、序列、连接

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.触发器 1.1.创建触发器 1.2.禁用触发器 & 启用触发器 & 删除触发器 2.任务 2.1.DBMS_ ...

  4. .Net程序员学用Oracle系列(11):系统函数(下)

    1.聚合函数 1.1.COUNT 函数 1.2.SUM 函数 1.3.MAX 函数 1.4.MIN 函数 1.5.AVG 函数 2.ROWNUM 函数 2.1.ROWNUM 函数简介 2.2.利用 R ...

  5. .Net程序员学用Oracle系列(25):触发器详解

    1.触发器理论 1.1.触发器的应用场景 1.2.触发器的类型 1.3.DML 触发器的触发顺序 2.触发器实战 2.1.创建触发器 2.1.1.创建 DML 触发器 2.1.2.创建 DDL 触发器 ...

  6. .Net程序员学用Oracle系列(28):PLSQL 之SQL分类和动态SQL

    1.SQL 语句分类 1.1.分类方法及类型 1.2.数据定义语言 1.3.数据操纵语言 1.4.其它语句 2.动态 SQL 理论 2.1.动态 SQL 的用途 2.2.动态 SQL 的语法 2.3. ...

  7. .Net程序员学用Oracle系列(30):零碎补充、最后总结(The End)

    1.同义词 2.Flashback 技术 3.连接字符串的写法 4.转义字符 & 特殊运算符 5.文件类型 6.查看参数 & 修改参数 7.AWR 工具 8.学习方法 & 学习 ...

  8. .Net程序员学用Oracle系列(8):触发器、作业、序列、连接

    1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2.使用序列 & 删除序列 4.连接 4.1.创建连接 4.2.使 ...

  9. Oracle系列:触发器、作业、序列、连接

    .Net程序员学用Oracle系列(8):触发器.作业.序列.连接   1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2 ...

随机推荐

  1. C# 多任务之 Task

    Task 是什么 ? Task 是一个类, 它表示一个操作不返回一个值,通常以异步方式执行. Task 对象是一个的中心思想 基于任务的异步模式 首次引入.NET Framework 4 中. 继承层 ...

  2. [算法] get_lucky_price price

    int get_lucky_price(int price, const vector & number) 题意大概是给你一个数price,比如1000,然后有unlucky_num,有{1, ...

  3. 2016/7/7 自定义函数copy

    题目:输入整数n(n<=10000),表示接下来将会输入n个实数,将这n个实数存入数组a中.请定义一个数组拷贝函数将数组a中的n个数拷贝到数组b中. 分析: (1)输入n,再输入n个实数存入数组 ...

  4. 学习C++ Primer 的个人理解(六)

    第四章和第五章没什么特别的.基本上就是书本上的字面意思,也没什么需要注意的细节.直接记录第六章. 本章介绍了函数,其实也没什么特别的.但有几个重点 1.形参的类型决定了形参和实参的交互方式.形参是引用 ...

  5. config spec

    config_spec Rules for selecting versions of elements to appear in a view APPLICABILITY Product Comma ...

  6. Entity Framework 学习笔记(1)

    开始从头系统地学习Entity Framework,当前的稳定版本为6.1.3,Nuget主页 http://www.nuget.org/packages/EntityFramework/ 微软喜欢把 ...

  7. TCP传输小数据包效率问题(译自MSDN)

    TCP传输小数据包效率问题(译自MSDN) http://www.ftpff.com/blog/?q=node/16 摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的.如果在设计方案中不对T ...

  8. C++中使用多线程

    使用的函数是CreateThread和CloseHandle相互配合. 举个简单的例子: 申明类变量 HANDLE hThread; DWORD ThreadID; 在需要创建线程的地方使用: hTh ...

  9. http数据包解析碰到gzip压缩格式的解压

    其中在做http数据包临控时碰到gzip压缩格式,在网友发布的一些技术文章基础上,经过一段时间的研究.调试,终于解析成功.现将核心代码公布于此,希望能够和大家一起共同学习交流.注:以下代码需要依赖zl ...

  10. Java知识总结--CoreJava

    在网上看到的关于Java的知识总结,觉得很受用,分享给大家..... 如果有什么错误,也欢迎指正批评. 1 简述下java基本数据类型及所占位数,java基本数据类型:4类8种 整数类型:byte(1 ...