了解Oracle存储过程中的角色

2016-02-19 15:42 1 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角色,那么他现在通过这个角色就直接拥有了以上权限。

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

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

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

     但是,假如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的表都可以自由地在存储过程中应用。

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

延伸阅读
配置环境: 1、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 2、安装路径:C:ORACLE 实现方法: 1.D:set NLS_LANG=AMERICAN_AMERICA.USACII7 或 D:set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 D:set 直接打set命令可以查看环境变量 2.在D:下创建a.sql文件,内容如下: Java代码 create or ...
标签: 怀孕
数字在备孕学科里代表了什么?正在努力造人的小两口们,都应该了解一下备孕后面的那些数字秘诀,究竟这些数字后面都有些什么秘密需要妈妈们来解开。 >>>身娇肉贵的女性如何备孕 每月一次卵子成熟,进而受孕或是随经血流逝,是人类繁衍的基本过程。但要想生育一个健康、聪明的宝宝,女性应该了解一些关键的“受孕数字”。美国“网络医学博士...
存储过程中的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 如下 代码如下...
标签: PHP
  PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护 不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。 但是使用存储过程至少有两个最明显的优点:速度和效率。 使用存储过程的速度显然更快。 在效率上,如果应用一次需要做一系...
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...

经验教程

925

收藏

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