1

一个特权调度程序用户 - user1 接收电子邮件通知,而另外两个(user2,user3)没有。

我想在 user3 模式上执行下面的代码,我们在 user2 上成功尝试了这个(代码直接在具有临时 sys.dbms_aq 访问权限的模式上执行)所以他现在收到他的通知。为 user1 上的 bot 用户代理启用了数据库访问。

如您所见,我知道“什么”解决了问题,但不知道该怎么做:-)

问题是 - 我们无法直接访问第二个帐户(user3)如何代表 user3 执行此代码?

declare  
  reginfo1    sys.aq$_reg_info;  
  reginfolist sys.aq$_reg_info_list;  
begin  

  reginfo1    := sys.aq$_reg_info('SYS.SCHEDULER$_EVENT_QUEUE:SCHED$_AGT2$_X',  
                                  1,  
                                  'plsql://SYS.SCHEDULER$_JOB_EVENT_HANDLER',  
                                  null);  
  reginfolist := sys.aq$_reg_info_list(reginfo1);  
  dbms_aq.register(reginfolist, 1);  
end; 

已经尝试在 user3 上创建过程并立即执行匿名块,但它仍然在 DBA_QUEUE_SUBSCRIBERS 中向 USER# 1 而不是 3 注册。

数据库版本是 11.2.0.3.0 在 unix 上。

4

1 回答 1

0

这是我的工作解决方案

>sqlplus user1  

Connected to:  
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production  

SQL> grant execute on sys.dbms_aq to user1;  

Grant succeeded.  

SQL> alter user user3 grant connect through user1;  

User altered.  

SQL> connect user1[user3]  
Enter password:  
Connected.  

SQL> create or replace procedure sched_not_add_q as  
 2    reginfo1    sys.aq$_reg_info;  
 3    reginfolist sys.aq$_reg_info_list;  
 4  begin  
 5    reginfo1    := sys.aq$_reg_info('SYS.SCHEDULER$_EVENT_QUEUE:SCHED$_AGT2$_3',  
 6                                    1,  
 7                                    'plsql://SYS.SCHEDULER$_JOB_EVENT_HANDLER',  
 8                                    null);  
 9    reginfolist := sys.aq$_reg_info_list(reginfo1);  
10    dbms_aq.register(reginfolist, 1);  
11  end;  
12  /  

Procedure created.  

SQL> exec sched_not_add_q;  

PL/SQL procedure successfully completed.  

SQL> drop procedure sched_not_add_q;  

Procedure dropped.  

SQL> connect user1  

Connected.  

SQL> revoke execute on sys.dbms_aq from user3;  

Revoke succeeded.  

SQL> alter user user3 revoke connect through user1;  

User altered.  

SQL> exit;  

> 

概念基于: http ://www.oracle.com/technetwork/issue-archive/2013/13-mar/o23asktom-1906478.html

于 2015-01-27T10:34:47.123 回答