了解Oracle存储过程中的角色

2016-02-19 15:42 9 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享了解Oracle存储过程中的角色吧。

【 tulaoshi.com - 编程语言 】

    角色(数据库权限集)与存储过程、函数和数据包之间的交互方式是Oracle安全模型中最难以处理的一个部分。Oracle中的对象权限可以直接或通过角色间接授予用户。

     假设一个HR用户向用户ABEL授予EMPLOYEES表的一些许可: GRANT select, insert, update, delete     这个语句直接把上述四个权限授予给用户ABEL。另一方面,假设一名HR用户这样做: GRANT select, insert, update, delete ON employees TO hr_role;     假如ABEL已被授予HR_ROLE角色,那么他现在通过这个角色就直接拥有了以上权限。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

     不管使用哪种方法,现在ABEL都拥有了HR.EMPLOYEES表的SELECT权限。假如ABEL通过SELECT语句直接从表中选择数据,那么他如何获得许可并不重要。

     但是,假如ABEL试图建立从这个表中选择的存储过程、函数或数据包,那么他是直接获得许可,还是通过角色取得许可就存在很大差异。

     Oracle要求直接向用户授予一个存储过程中的非拥有对象许可。在编辑过程中角色被临时关闭,用户不能访问授予给他们的任何内容。这样做是出于性能和安全考虑。

     角色可以通过SET ROLE命令动态激活和禁用,假如Oracle需要不断检查哪个角色和许可当前处于激活状态,则会带来巨大的治理负担。

     下面的代码是一个更新HR雇员文件的简短存储过程(这段代码用一个同义字EMPLOYEES来代表HR.EMPLOYEES)。当ABEL在第一种情况下试图用直接权限编辑这个文件时,编辑取得成功;当他在第二种情况下仅用间接权限编辑时,编辑失败。 CREATE OR REPLACE PROCEDURE update_emp ( p_employee_id IN NUMBER ,p_salary IN NUMBER ) AS v_department_idemployees.department_id%TYPE; BEGIN SELECT department_id INTO v_department_id FROM employees WHERE employee_id = p_employee_id; UPDATE employees SET salary = p_salary WHERE employee_id = p_employee_id; IF v_department_id = 100 THEN UPDATE local_employees SET salary = p_salary WHERE employee_id = p_employee_id; END IF; END; /     有趣的是,向PUBLIC授予许可和直接授予所有用户许可相同。PUBLIC常被认为是一个角色,但它并不是一个角色。它是一个用户集而不是一个许可集。假如向PUBLIC授权HR.EMPLOYEES的许可,ABEL将能够建立他自己的存储过程。虽然在EMPLOYEES表中我们不推荐这样做,但任何授予给PUBLIC的表都可以自由地在存储过程中应用。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1610250.html

延伸阅读
标签: SQLServer
SQL server 的 T-Sql 语言的功能是 非常的强大,但是有个时候 也确实是有些限制和不方便,为什么不象 asp 一样 大量的借用组件呢?开始在 Sql online book 中查找,终于找到了 一个 Sql 的 系统存储过程 sp_OACreate,下面大家就一起去 看看这个 存储过程的神气之处吧 s首先我们先用VB 作一个最简单的组件 ,因为是介绍性的文章,所以这个组件是...
存储过程中的TOP后跟一个变量会如何? 代码如下: Create proc getWorkPlan2 (@intCounter int ,@lngUserID int) as select Top 5 lngWorkID,strWorkName,strExecHumanName,strBeginDate from worklist where lngExecHumanID= @lngUserID order by lngWorkID desc 现在想将这里的Top 5 改为变量· Top @intCounter 如下 代码如下...
标签: 怀孕
数字在备孕学科里代表了什么?正在努力造人的小两口们,都应该了解一下备孕后面的那些数字秘诀,究竟这些数字后面都有些什么秘密需要妈妈们来解开。 >>>身娇肉贵的女性如何备孕 每月一次卵子成熟,进而受孕或是随经血流逝,是人类繁衍的基本过程。但要想生育一个健康、聪明的宝宝,女性应该了解一些关键的“受孕数字”。美国“网络医学博士...
方法1: X:\oracle\ora81\bin\wrap   iname=XXX   oname=XXX    方法2:9i在win2000下使用wrap加密存储过程,10g可以用加密包dbms_ddl.wrap或dbms_ddl.create_wrapped。 11.5.1 在win2000下使用wrap加密存储过程 wrap.bat rem 使用方法:wrap 待加密的文件名 set ...
SQL_PLUS中 spool ExecCompProc.sql select 'alter procedure 'object_name' compile;' From all_objects where status = 'INVALID' and object_type = 'PROCEDURE'; spool off @ExecCompProc.Sql; 整理成一个存储过程 Create Or Replace Procedure Zl_Compile_Invalid_Procedure As  Strsql V...

经验教程

218

收藏

42
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部