Streaming queues security on z/OS®
The streaming queues feature allows an administrator to configure a local (or model) queue with a secondary queue, where duplicate messages are placed, whenever a message is put to the original queue. There are two aspects to consider regarding queue streaming authorities.
Authority to configure a queue for streaming duplicate messages
If you want to enable message streaming of duplicate messages from one queue to a secondary
queue, you must have permission to do so. Permission to configure the STREAMQ
attribute of a queue requires that you have the following profiles setup:
- ALTER access level to MQADMIN or MXADMIN for the queue they are altering the STREAMQ attribute for
- ALTER access level to MQADMIN or MXADMIN for the queue you want to stream messages to
The combination of these security checks at configuration time ensures that a user, who only has ALTER access on the original queue, cannot cause messages to be put to another queue on which they have no permissions.
Authority to open the queue or queues and put messages
When an application opens a queue that has been configured with a secondary queue, through its
STREAMQ attribute, an authority check is made that the application user has
UPDATE authority on the original queue.
Note: No additional authority check is made for the
application user on the secondary queue, which is similar to the authority model used for alias
queues.
Applications consuming messages from either the original or the secondary queue require UPDATE or READ authority, only on the queue they are consuming from.
No additional authority checks are made at put or get time.
Example
The following example shows the correct profiles being set to allow user
ADMIN
to configure an original queue, INQUIRIES.QUEUE, to stream messages to local queue ANALYTICS.QUEUE
using RACF:RDEFINE MQCMDS <QMGR>.ALTER.QLOCAL UACC(NONE) OWNER(<OWNER>)
PERMIT <QMGR>.ALTER.QLOCAL CLASS(MQCMDS) ID(ADMIN) ACCESS(ALTER)
RDEFINE MQADMIN <QMGR>.QUEUE.INQUIRIES.QUEUE UACC(NONE) OWNER(<OWNER>)
PERMIT <QMGR>.QUEUE.INQUIRIES.QUEUE CLASS(MQADMIN) ID(ADMIN) ACCESS(ALTER)
RDEFINE MQADMIN <QMGR>.QUEUE.ANALYTICS.QUEUE UACC(NONE) OWNER(<OWNER>)
PERMIT <QMGR>.QUEUE.ANALYTICS.QUEUE CLASS(MQADMIN) ID(ADMIN) ACCESS(ALTER)
User
ADMIN is then able to issue the following
command:ALTER QLOCAL(INQUIRIES.QUEUE) STREAMQ(ANALYTICS.QUEUE) but if the
same user issues the following command without setting up the correct security profiles:
ALTER QLOCAL(INQUIRIES.QUEUE) STREAMQ(PURCHASES.QUEUE)to configure
INQUIRIES.QUEUE to put duplicate messages to PURCHASES.QUEUE, they receive the following
error:CSQM166I <QMGR> CSQMAQLC QLOCAL(INQUIRIES.QUEUE) NOT AUTHORIZED