Oracle恢复DBA权限相关问题:ORA-01536 After Revoking DBA Role [ID 465737.1]Applies to:Oracle Server - Enterprise Edition
Oracle 恢复 DBA 权限相关问题:
撤销 DBA 角色后的 ORA-01536 [ID 465737.1]
适用于:
Oracle Server - Enterprise Edition - 版本: 8.1.7.4 到 10.2.0.3
此问题可能发生在任何平台上。
症状
ORA-01536:超出表空间 '' 的空间配额
从用户撤销 DBA 或资源角色后
示例:
SQL> conn /as sysdba
已连接。
SQL>创建由 testos 标识的用户 testrights;
已创建用户。
SQL> grant connect, resources to testrights;
授予成功。
SQL>连接 testrights/testos;
已连接。
SQL> CREATE TABLE "TESTRIGHTS"."TESTTAB" ( "TESTFIELD" VARCHAR2(200) NOT NULL
, 约束 "TESTPK" 主键 ("TESTFIELD") VALIDATE ) 表空间 "USERS" 存储 (初始 64M) ;
表创建。
SQL> conn /as sysdba
已连接。
SQL> grant dba to testrights;
授予成功。
SQL>撤销 dba 的测试权限;
撤销成功。
SQL>显示用户
用户是“SYS”
SQL> drop table testrights.testtab;
表已删除。
SQL> conn testrights/testos;
已连接。
SQL>创建表“TESTRIGHTS”.“TESTTAB”(“TESTFIELD”VARCHAR2(200)NOT NULL
,约束“TESTPK”主键(“TESTFIELD”)验证)表空间“用户”存储(初始64M);
创建表“TESTRIGHTS”.“TESTTAB”(“TESTFIELD”VARCHAR2(200)NOT NULL,
约束“TESTPK”主键(“TESTFIELD”)验证)表空间“用户”
存储(初始64M)
*
第 1 行出现错误:
ORA-1536:超出表空间“USERS”的空间配额
SQL>; conn /as sysdba
已连接。
SQL> grant connect, resources to testrights;
授予成功。
SQL> conn testrights/testos;
已连接。
SQL>
SQL> CREATE TABLE "TESTRIGHTS"."TESTTAB" ( "TESTFIELD" VARCHAR2(200) NOT NULL , CONSTRAINT "TESTPK" PRIMARY KEY ("TESTFIELD") VALIDATE ) TABLESPACE "USERS"
存储(初始 64M);
表创建。
原因
此问题已在 Bug 6494010 中讨论。
行为。上面示例中看到的情况是预期的,而不是错误
当角色在 7.0 中首次引入 Oracle 时,RESOURCE 和 DBA 的旧 Oracle V6 权限已迁移以使用新的角色功能。但由于 RESOURCE 和 DBA 角色不允许被授予 UNLIMITED TABLESPACE,因此为了保持与 V6 的向后兼容性,解析器会自动转换语句,使得“将资源授予 abc”自动变为“将资源、无限表空间授予 abc”并且“从 abc 撤销资源”自动变为“从 abc 撤销资源、无限表空间”。授予和撤销 DBA 角色时也是如此。这种行为过去在 SQL 参考指南中有详细记录,内容如下:
注意:如果您向用户授予或撤销 RESOURCE 或 DBA 角色,Oracle 会隐式向该用户授予或撤销 UNLIMITED TABLESPACE 系统权限。用户。
解决方案
要解决此问题,您需要:
1] 将 DBA 或资源角色授予回被撤销的用户。
更多Oracle相关信息见Oracle专题页面 ?tid=12
,