1

次の MQSC コマンドを使用してキュー マネージャー QM_TEST を作成しました。

  SET AUTHREC OBJTYPE(QMGR) GROUP('mq-user') AUTHADD(INQ,DSP,CONNECT,SET,SETALL)
  SET AUTHREC PROFILE(SYSTEM.MQEXPLORER.REPLY.MODEL) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,GET)
  SET AUTHREC PROFILE(SYSTEM.ADMIN.COMMAND.QUEUE) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,PUT)
  DEFINE CHANNEL ($cname) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER('tcs-mq-user') REPLACE
  SET CHLAUTH($cname) TYPE(ADDRESSMAP) ADDRESS(*) MCAUSER('tcs-mq-user')
  DEFINE QLOCAL ($dlqname) REPLACE
  SET AUTHREC PROFILE($dlqname) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(ALL)
  ALTER  QMGR DEADQ($dlqname) FORCE
  DEFINE LISTENER ($lname) TRPTYPE (TCP) CONTROL (QMGR) PORT ($port)
  START LISTENER ($lname)

以下を使用して作成された TEST1 と TEST2 の 2 つのキューがあります。

DEFINE QLOCAL ($qname) GET(ENABLED) PUT(ENABLED) MAXDEPTH($maxdepth) REPLACE
SET AUTHREC PROFILE($qname) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(ALL)

q プログラム ユーティリティを使用して、TEST1 から TEST2 にメッセージをコピーしようとしています。

q -xb -mQM_TEST -iTEST1 -mQM_TEST -oTEST2 -p20

ただし、次のエラーが表示されます。

Paul Clarke による MQSeries Q プログラム [V6.0.0 ビルド:2012 年 5 月 2 日] 接続中 ...失敗しました。オブジェクト 'QM_TEST' の MQCONNX が 2035 Not Authorized を返しました..

WebSphere MQ v7.1 を実行しています。q SupportPac がサーバーにインストールされており、サーバーで q コマンドを実行しています。チャネル名 TEST_CHANNEL とポート番号 1414 を渡す方法がわかりません。それが問題ですか?

4

1 に答える 1

1

プログラムは、SVRCONN チャネルを使用するのではなく、共有メモリを介してバインド モードで QMgr に接続しています。これを確認するALTER QMGR AUTHOREV(ENABLED)には、QMgr イベント キューで生成される認証イベントを調べます。SupportPac MS0Pをインストールしている場合は、キューを右クリックし、[イベント メッセージのフォーマット] を選択して、人が読める形式で表示できます。tcs-mq-userいずれにせよ、接続に使用されている IDは、Q プログラムの実行に使用している ID ではないことがわかります。試す:

q -lmqic -xc -iTEST1 -oTEST2 -p20

プログラムを で実行すると、チャネルの詳細を求めるプロンプトが表示されます-xc

Q プログラムはキューをファイルにダンプできますが、そのようには設計されていません。SupportPac MO03 の QLoad プログラムはそのために設計されており、メッセージのすべての側面をキャプチャし、適切に許可されている場合は、それらをそのまま復元します。これには、メッセージ ID、タイムスタンプなどが含まれます。

AUTHREC最後に、投稿のステートメントについて簡単に説明します。せっかく権限の低いMCAUSER権限を設定したのですから、その ID には管理者権限を持たせたくないのではないでしょうか。ユーザー+setまたは+setallQMgr に権限を付与すると、ユーザーは WMQ エクスプローラーまたは PCF コマンドを使用するその他のものを使用して認証レコードを管理できることに注意してください。QMgr の権限を に制限することを検討してください+dsp +inq +connect

通常、アプリケーションは DLQ にアクセスするのではなく、アプリケーション固有のバックアウト キューにアクセスします。アプリが DLQ へのアクセスを許可されている場合、通常はそこにメッセージを配置するだけで、それらを取り戻すことはできません。これは、DLQ がシステム全体のリソースであり、QMgr が共有されている場合、複数のアプリからのメッセージが DLQ に到達する可能性があるためです。セキュリティ上の予防措置として、そのキューの削除アクセスを管理者に制限してください。このようにして、誰かが自分のアプリの後にクリーンアップすることで、別のアプリに属する​​メッセージを誤って (または別の方法で) 削除することができなくなります。

更新:
あなたの投稿を確認したところ、別の不一致に気付きました。mqmまたは以外の ID を使用してバインド モードで接続していたため、2035 Authorization Error が発生していると想定していましたtcs-mq-user。もう一度調べたmq-userところ、アクセスしようとしているキューに対してグループを承認していないことがわかりました。このシナリオでは使用されていないコマンド キューと応答モデルにそれを承認しました。(WMQ Explorer はそれらを使用します。) したがって、次のルールを追加します。

SET AUTHREC PROFILE(TEST1) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(PUT,GET,INQ,BROWSE)
SET AUTHREC PROFILE(TEST2) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(PUT,GET,INQ,BROWSE)

実際に として接続している場合、これにより認証の問題が解決されtcs-mq-userます。

私の知る限り、コマンドラインでチャネルを Q に渡す方法はありませんが、標準のMQSERVER variableを受け入れます。例えば:

export MQSERVER="$cname/TCP/localhost($port)"

...$cnameはチャネル名、$portはポートです。これが私のテストです:

tcs-mq-user:~> export MQSERVER="TEST.SVRCONN/TCP/localhost(1414)"
tcs-mq-user:~> q -xb -iTEST1 -mQMTEST -lmqic
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May  2 2012 ]
Connecting ...connected to 'JMSDEMO'.
No more messages.
tcs-mq-user:~> 

クライアントライブラリが見つからない理由については、それらをインストールしていますか?

tcs-mq-user:~> rpm -qa | grep MQSeriesClient
MQSeriesClient-7.5.0-0
于 2012-07-27T21:31:38.170 に答える