背景:
用户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 "表空间名称";文章来源:https://www.toymoban.com/news/detail-532390.html
四、用户取消DBA推荐操作
revoke dba to 用户A;
grant resource to 用户A;文章来源地址https://www.toymoban.com/news/detail-532390.html
到了这里,关于Oracle取消DBA权限后,报错无表空间操作权限:ORA-01950:no privileges on tablespace ‘xxx‘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!