administer resource manager/sys.sys_group 的授权

今天台湾同事说执行一个脚本时出错,脚本出错的2个命令是:

GRANT ADMINISTER RESOURCE MANAGER TO DM_ADMIN;

GRANT EXECUTE ON SYS.SYS_GROUP TO DM_ADMIN;

先处理第一个:

1.报错信息:

ERROR at line 1:
ORA-00990: missing or invalid privilege

解决:

先执行:select * from dba_sys_privs where privilege like 'ADMINISTER%';结果如下:

GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
DBA ADMINISTER DATABASE TRIGGER YES
DBA ADMINISTER RESOURCE MANAGER YES

看来是DBA角色拥有这个权限。于是用sys用户登陆到数据库(工具是TOAD),然后到选择用户的role,sys用户拥有许多的role,于是选dba,看右边窗口的scripts,第一行就是以下内容:

BEGIN
SYS.DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE
(GRANTEE_NAME => 'DBA',
PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER',
ADMIN_OPTION => TRUE);
END;
/

我把用户名更改一下就可以了。

接着处理第二个,第二个问题先到google上搜了一圈,发现还是要到metalink上找答案。

答案是这样的:

TIP: Click help for a detailed explanation of this page.
BookmarkGo to End

Subject: Grant Execute on SYS.SYS_GROUP Fails with ORA-4042
Doc ID: Note:161011.1Type: PROBLEM
Last Revision Date: 23-JUN-2002Status: PUBLISHED

  • fact: Oracle Server - Enterprise Edition
  • symptom: Grant Execute on SYS.SYS_GROUP Errors
  • symptom: ORA-04042: procedure, function, package, or package body does not exist
  • cause: Bug 1190886 Can't grant execute on SYS.SYS_GROUP to other user by sys. The bug states that it is not a bug in RDBMS: SYS_GROUP is a resource manager consumer group. GRANT and REVOKE do not operate on objects of this type (i.e. consumer groups) and aren't meant to.
fix: Default consumer groups are set by the SET_INITIAL_CONSUMER_GROUP call in dbms_resource_manager_privs and the ability to switch to others/membership of them by GRANT_SWITCH_CONSUMER_GROUP in the same package. The operation of granting execute against such a group is both meaningless and illegal syntax.

. 猛一看没看懂,只能静下心来看,这些鬼东西估计也跟第一个错误一样,调个包的过程,然后传点参数而已。这段文字中,说道:call in dbms_resource_manager_privs,那应该就是这个包,再看最后:GRANT_SWITCH_CONSUMER_GROUP in the
same package,就是说要掉这个包的存储过程。

于是到sys用户(同样用toad工具),登陆后选sys用户的的proc这个选项,看到了dbms_resource_manager_privs这个包,同样点右边窗口的script,看到了 PROCEDURE grant_switch_consumer_group(grantee_name IN VARCHAR2, consumer_group IN VARCHAR2,grant_option IN BOOLEAN);这个存储过程的定义。也就是说,我可以执行这个存储过程。快ok了。

剩下的就是传参数了,第一个是找权限授予者,没问题,大写写用户名就ok,后面一个是consumer_group,看到这个参数还真想了一下,感觉应该是sys_group,再看文章,其中有一句:SYS_GROUP is a resource manager consumer group.就知道自己的估计是对的。最后一个参数自然是写true。

执行,都ok了。

[@more@]

请使用浏览器的分享功能分享到微信等