数码资讯
如何实现仅授予用户查看存储过程定义的权限
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
一位网友问我如何给用户一个存储过程的定义权限,而不是让用户修改和执行存储过程,这个看似简单的问题是因为它从来没有遇到过这样的需求,花了一些时间来梳理和总结。
关于甲骨文账户的权利,一般分为两种权利:
系统权限:允许用户执行特定的数据库操作,如创建表、创建索引、创建存储过程等。
对象权限:允许用户操作特定对象,例如读取视图、更新某些列、执行存储过程,等等。
权限,比如存储过程定义的这个视图,是对象权限,但是让我们先看看关于存储过程的系统权限。
特权名称属性
-----------------------------------------------------------
- 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
因此,我们只需要授予用户权限的调试存储过程,我们可以授予用户权限查看存储过程的定义,同时限制用户修改和执行存储过程,以便用户只允许用户查看存储过程定义的权限。但让我觉得有点奇怪的。
以上是如何实现小编辑实现的,只给用户查看存储过程定义的定义,希望能对您的学习有所帮助。
关于甲骨文账户的权利,一般分为两种权利:
系统权限:允许用户执行特定的数据库操作,如创建表、创建索引、创建存储过程等。
对象权限:允许用户操作特定对象,例如读取视图、更新某些列、执行存储过程,等等。
权限,比如存储过程定义的这个视图,是对象权限,但是让我们先看看关于存储过程的系统权限。
特权名称属性
-----------------------------------------------------------
- 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
因此,我们只需要授予用户权限的调试存储过程,我们可以授予用户权限查看存储过程的定义,同时限制用户修改和执行存储过程,以便用户只允许用户查看存储过程定义的权限。但让我觉得有点奇怪的。
以上是如何实现小编辑实现的,只给用户查看存储过程定义的定义,希望能对您的学习有所帮助。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。