系统新来了系统运维人员,要求创建数据库账号,只分配对表,视图,存储程序有只读权限
因为表和视图权限接触比较频繁,所以今天花点时间整理下关于存储过程的权限
关于ORACLE账号的权限问题,一般分为两种权限:
系统权限
: 允许用户执行特定的数据库动作,如创建表、创建索引、创建存储过程等
对象权限
: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等
像这种查看存储过程定义的权限为对象权限,但是我们还是首先来看看关于存储过程的系统权限吧:
上图所示关于存储过程的系统权限一共有六种:
CREATE PROCEDURE、创建存储程序
CREATE ANY PROCEDURE、 创建任何存储程序
ALTER ANY PROCEDURE、更改任何存储程序
DROP ANY PROCEDURE、删除任何存储程序
EXECUTE ANY PROCEDURE、执行任何存储程序
DEBUG ANY PROCEDURE.查看定义任何存储程序
做个试验验证下存储过程的对象权限
将STG用户下的存储程序FP_SO的权限赋给新建用户ZMM,ZMM初始赋给的权限有connect和resource
从上图所示:存储程序的对象全乡有EXECUTE和DEBUG两种:
试着将所有的权限回收,然后单独赋予ZMMexecute和debug权限
1,REVOKE ALL ON FP_SO FROM ZMM;
GRANT EXECUTE ON FP_SO TO ZMM;
2,REVOKE ALL ON FP_SO FROM ZMM;
GRANT EXECUTE ON FP_SO TO ZMM;
经验证,execute有查看和执行的权限
debug只有查看的权限
所以,只需要授予存储过程的DEBUG权限给某个用户,就可以实现只授予用户查看存储过程定义的权限,而限制用户修改、执行存储过程。从而达到只授权用户查看存储过程定义的权限。
不用纠结包和包体,只要赋予相关存储过程权限,包和包体都有相关的权限