Oracle取消DBA权限后,报错无表空间操作权限:ORA-01950:no privileges on tablespace ‘xxx‘

背景:
用户A有被赋予DBA权限,因产生告警,需把DBA取消掉。
20230620取消用户A的dba权限;
20230627系统开始运行异常;
20230701经排查发现因无表空间操作权限导致存储过程执行insert语句失败;
20230701赋予表空间操作权限后系统恢复。

原因分析:
一、原因:oracle在回收某用户DBA角色权限或RESOURCE角色权限时,会同时收回该用户的UNLIMITED TABLESPACE系统权限。
#查询用户角色权限

select * from dba_role_privs where GRANTEE='用户A' ;

#查询用户系统权限(回收dba/resource后可发现UNLIMITED TABLESPACE也没有了)

select * from dba_sys_privs where GRANTEE='用户A';

1、对于一个新建的用户,如果没有分配给unlimitedtablespace系统权限的用户,必须先给他们指定配额,之后他们才能在表空间中创建对象。
2、系统权限unlimited tablespace是隐合在dba, resource角色中的一个系统权限,当用户得到dba或resource的角色时,unlimited tablespace系统权限也隐式受权给用户。
3、当一个用户同时具有resource和dba角色时,当回收了dba角色后(revoke dba fromusername),该用户之前具有的unlimited tablespace系统权限同时回收了,即使该用户还具有有resource角色也同样会回收。这将导致该用户没有任何表空间的配额,不能再表空间做任何操作,而且实际验证在这种情况下,数据库不会有任何的告警日志,因此很难排查,只能从应用端去排查相应的报错。因此在回收dba角色后,一定要检查是否具有相应的unlimitedtablespace权限,或者重新针对相应的表空间修改配额,推荐针对相应的表空间修改配额(参照解决方法三),而不是授予unlimitedtablespace系统权限。

二、结果:导致用户无UNLIMITED TABLESPACE权限造成最终造成业务中断

三、解决:回收DBA角色时,需要重新将必要的权限授权给对应用户
#重新赋予DBA
grant dba to 用户A;

#重新赋予resource
grant resource to 用户A;

#为用户分配表空间配额
ALTER USER 用户A QUOTA UNLIMITED ON "表空间名称";

四、用户取消DBA推荐操作
revoke dba to 用户A;
grant resource to 用户A;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ahuuua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值