网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle数据库技术(11).
.以最短的宕机时间升级到Oracle 1.
.如何在Windows 2000环境中Kill掉.
.你不能不知道的小技巧.
.如何查看什么时间有哪些数据库对.
.Oracle数据库技术(28).
.Oracle 9i的方案对象.
.在RedHat 7.0下Oracle 8.1.6 的安.
.在 Oracle 中编写的树级代码分享.
.Result Sets from Stored Proced.
.REDHAT9下安装Oracle9.2.0的成功.
.为什么同机安装10g和11g后会出现.
.提高Linux上小型数据库的速度.
.在Oracle数据库XE上构建Google E.
.ORACLE 10.1.0.2 FOR LINUX86 .
.Oracle 10G数据库的特性简介(收藏.
.说说Oracle数据库中的MTS.
.修改oracle9i数据库字符集的方法.
.*[原创]*安装文档ORACLE9i for s.
.关于使用RMAN进行clone数据库一.

如何在存储过程中拥有role的权限

发表日期:2008-2-9



  我们知道,用户拥有的role权限在存储过程是不可用的。如:     SQL> select * from dba_role_privs where grantee='SUK';     GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
    ------------ ------------ ------------ ------------
    SUK DBA NO YES
    SUK CONNECT NO YES
    SUK RESOURCE NO YES     --用户SUK拥有DBA这个role     --再创建一个测试存储过程:
    create or replace procedure p_create_table
    is
    begin
    Execute Immediate 'create table create_table(id int)';
    end p_create_table;     --然后测试
    SQL> exec p_create_table;     begin p_create_table; end;     ORA-01031: 权限不足
    ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
    ORA-06512: 在line 1     --可以看到,即使拥有DBA role,也不能创建表。role在存储过程中不可用。
    --碰到这种情况,我们一般需要显式进行系统权限,如grant create table to suk;
    --但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
    --实际上,Oracle给我们提供了在存储过程中使用role权限的方法:
    --修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
    create or replace procedure p_create_table
    Authid Current_User is
    begin
    Execute Immediate 'create table create_table(id int)';
    end p_create_table;     --再尝试执行:
    SQL> exec p_create_table;     PL/SQL procedure sUCcessfully completed     --已经可以执行了。
上一篇:如何更快地批量数据处理? 人气:705
下一篇:关于自动PGA管理的进一步探讨 人气:661
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐