故障005:普通用户debug调试报错无执行权限

DM技术交流QQ群:940124259

1. 问题描述

某行DBA人员打电话向我询问,在DM管理工具中,且调试自己用户模式下的存储过程或者函数,调试报错提示 “没有执行权限,请重新编辑用于调试的sql语句”,为何不能调试?
照理来说,自己模式的存储过程直接调用没问题,从而引出怀疑存储过程里面代码对某些无访问权限的对象。经仔细查看,代码里对表的访问也属于本模式中的,所以存储过程中
不存在无访问权限的对象。暴力快捷方式,直接给个DBA角色权限不就完了吗。其实不然,尤其是针对金融行业,对业务系统中的用户权限和操作权限要求非常严格。

现场报错截图:
在这里插入图片描述


2. 案例重现

2.1 新建普通用户

create user cqsoft identified by "cqsoft";
grant resource, vti, soi to cqsoft;  -- 基础权限分配

2.2 构造一张表和存储过程

提示:使用cqsoft账户登录后,执行以下SQL代码。

-- 建t2表
drop table if exists t2;
create table t2 
 as 
select 63 + level v1, chr(63 + level) v2
from dual 
connect by level <= 5;

-- sp_myproc存储过程
-- 存储过程中穿插本模式下表的查询代码,为验证访问自身表的问题。
create or replace procedure sp_myproc (c1 in int, c2 in int, c3 out int)
is
  v_max int := 0;
begin
  select max(v1) into v_max from t2;
  c3 = c1 + c2 + v_max;
end;

在这里插入图片描述

2.2 重现调试报错

在这里插入图片描述
在这里插入图片描述


3. 解决方法

3.1 方法一:分配DBA权限(不建议)

尽量缩小用户的权限操作,实现各司其职的功能,即什么样的角色用户仅分配权力以内的事,过多权限带来维护的风险性(并不是危言耸听),因为每个人的技术水平不一样。

某XX账户临时使用一下调试,在其公司内部的决策允许下,可通过DBA角色解决。

-- SYSDBA账户或带有DBA管理权限并享有转赠权限的用户(WITH ADMIN OPTION)。
grant dba to cqsoft;

-- 调试完请记得立即回收DBA权限。
revoke dba from cqsoft;

3.2 方法二:单独赋权(建议)

需要初始化DBG_PKG调试包,使用SYSDBA账户分配相应的包执行权限给调试用户。

sp_init_dbg_sys(1);
grant execute on sys.dbg_pkg to cqsoft;

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值