ОРА-01031:недостаточные привилегии для создания JMS-соединения с темой Oracle
-
22-08-2019 - |
Вопрос
У одного из моих коллег возникла проблема с созданием (недлительного) подписчика очереди Oracle из Java.
Очередь принадлежит одной схеме (скажем, OWNER);он пытается подключиться как другой пользователь (скажем, ПОДПИСЧИК).ВЛАДЕЛЕЦ предоставил ПОДПИСЧИКУ привилегии ОТКЛЮЧИТЬ ИЗ ОЧЕРЕДИ (и ВСТУПИТЬ В ОЧЕРЕДЬ, чего бы это ни стоило).
Когда он создает очередь с параметром «multiple_consumers», установленным в значение FALSE, все работает нормально.Когда для параметра «multiple_consumers» установлено значение TRUE (нужный нам параметр), происходит сбой со следующим:
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)
Если он подключается как ВЛАДЕЛЕЦ, это удается.
Как мне определить, какие привилегии мне нужно предоставить ПОДПИСЧИКУ?
Решение
Вам нужно либо создать постоянного подписчика, либо предоставить подключающемуся пользователю AQ_ADMINISTRATOR_ROLE — не лучшая модель безопасности, но на данный момент это реализация Oracle.
https://forums.oracle.com/forums/thread.jspa?messageID=9793091