文档解释
ORA-30990: insufficient privileges to change owner of resource string
Cause: An attempt was made to change the field of an XML DB resource without sufficient privileges to do so.
Action: Switch to SYS before performing the ownership change, or have the intended recipient of the resource perform the transfer.
错误说明
ORA-30990: insufficient privileges to change owner of resource string 错误,指用户在尝试更改拥有某一资源权限时,由于权限不够以致产生的 Oracle 错误代码。这里的 resource string 表示所尝试更改权限的某个资源对象,例如表、索引、序列等,但用户没有足够权限更改它的所有者,所以会报此错误。
常见案例
典型的情况有:
1. 用户尝试修改其他用户拥有的资源对象的状态,例如:用户 A 尝试修改用户 B 所拥有的表:
ALTER TABLE B.TABLE_NAME OWNER TO USER_C;
此时,用户 A 将会收到 ORA-30990 错误,因为 A 用户没有足够权限更改 B 用户拥有对象的所有者。
2. 用户尝试给其他用户授予某一资源权限,例如用户 A 尝试授予用户 B 对表的 INSERT 权限:
GRANT INSERT ON TABLE_NAME TO USER_B;
此时,如果 A 用户没有给 B 用户授予此资源的权限,就会报 ORA-30990 错误。
解决方法
1. 如果是自己的对象,需要自己有权限才能修改它的对象权限,此时可以使用 GRANT 来授予自己足够的权限,然后再执行更改权限的操作即可。
例如:GRANT ALTER ANY OBJECT 权限
2. 如果要更改其他用户拥有的对象状态,此时就需要用到 ALTER USER 权限,此权限默认只有 DBA 用户和 Sysdba 用户有,所以如果你没有这两种权限,就需要找相关的权限用户来给你授予 ALTER USER 权限,这样你就可以使用 ALTER USER 语句来修改其他用户拥有资源对象的状态了。
3. 如果要给其他用户授权,可以用 GRANT 来授予相关权限即可,但是要授权给其他用户,需要你有 GRANT ANY PRIVILEGE 权限,即用户可以给其他用户授予任何权限,如果你没有 GRANT ANY PRIVILEGE 权限,就无法给其他用户授予权限:
GRANT GRANT ANY PRIVILEGE TO USER_A
此时,也可以向相关的权限用户申请,让其授予你 GRANT ANY PRIVILEGE 权限,这样就可以给其他用户授予相关权限了。