У одного из моих коллег возникла проблема с созданием (недолговечного) подписчика в очереди Oracle из Java.
Очередь принадлежит одной схеме (скажем, ВЛАДЕЛЕЦ); он пытается подключиться как другой пользователь (скажем, подписчик). АБОНЕНТ предоставил ВЛАДЕЛЬЦЕМ привилегии DEQUEUE (и ENQUEUE, для чего это стоит).
Когда он создает очередь с параметром «multiple_consumers», установленным в FALSE, все работает нормально. Если для параметра «множественные_коннекторы» задано значение ИСТИНА (нужное нам значение), произойдет сбой со следующим:
oracle.jms.AQjmsException: ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 5757
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_AQJMS", line 129
ORA-06512: at line 1
at oracle.jms.AQjmsSession.addDurableSubscriber(AQjmsSession.java:3708)
at oracle.jms.AQjmsSession.createSubInOldMode(AQjmsSession.java:2742)
at oracle.jms.AQjmsSession.createDurableSubscriber(AQjmsSession.java:2400)
at oracle.jms.AQjmsSession.forceCreateOldSubscriber(AQjmsSession.java:2884)
at oracle.jms.AQjmsSession.createConsumer(AQjmsSession.java:6820)
Если он подключится как ВЛАДЕЛЕЦ, это удастся.
Как мне определить, какие привилегии мне нужно предоставить АБОНЕНТУ?