一位网友问我如何给用户一个存储过程的定义权限,而不是让用户修改和执行存储过程,这个看似简单的问题是因为它从来没有遇到过这样的需求,花了一些时间来梳理和总结。

关于甲骨文账户的权利,一般分为两种权利:

系统权限:允许用户执行特定的数据库操作,如创建表、创建索引、创建存储过程等。

对象权限:允许用户操作特定对象,例如读取视图、更新某些列、执行存储过程,等等。

权限,比如存储过程定义的这个视图,是对象权限,但是让我们先看看关于存储过程的系统权限。


特权名称属性

-----------------------------------------------------------

- 140创建过程0

- 141创建任何过程0

- 142更改任何程序0

- 143放弃任何程序0

- 144执行任何程序0

- 241调试任何程序0



如上所示,对存储过程的系统权限一般有六种类型:创建过程、创建任何过程、修改任何过程、删除任何过程、执行任何过程、调试任何过程。所以在存储过程对象的权限,有人做了以下的例子,在用户proc_test escmuser创建存储过程


创建或替换程序escmuser.proc_test

作为

开始

dbms_output.put_line(这只是测试);

结束;



使用系统用户创建一个用户临时表,如下所示


创建由温度标识的用户温度;

用户创建的。

授予连接,资源到临时;

格兰特接替。



所有的存储过程proc_test权限授予用户临时用户escmuser下。然后我们发现该存储过程的对象权限只有执行权限,调试


SQL> Col专营公司A12;

SQL> Col table_name 30;

SQL> Col保人为12;

A8的SQL特权;

SQL >选择*从user_tab_privs_made在受让人= 'temp;


受让人的特权table_name GRA HIE

不是

温度proc_test escmuser调试无无

温度proc_test escmuser执行不


SQL >



该存储过程的权限porc_test从临时用户缩回,然后用户临时授予的权限,proc_test调试存储过程


已撤销所有对proc_test从温度;

已授予调试proc_test温度;


此时,临时用户没有足够的权限执行存储过程的报表。


SQL >设置serverout上;

SQL> exec escmuser.proc_test;

开始escmuser.proc_test;结束;

ora-06550:2行,16列:

pls-00904:足够的特权来访问对象escmuser.proc_test

ora-06550:2行,7列:

忽略了语句


在这一点上,如果存储过程proc_test改性,对ora-01031问题是不够的。但你可以在PL / SQL开发工具或使用视图下查看存储过程的定义,如下图所示。


SELECT * FROM all_source name = 'proc_test


因此,我们只需要授予用户权限的调试存储过程,我们可以授予用户权限查看存储过程的定义,同时限制用户修改和执行存储过程,以便用户只允许用户查看存储过程定义的权限。但让我觉得有点奇怪的。

以上是如何实现小编辑实现的,只给用户查看存储过程定义的定义,希望能对您的学习有所帮助。