MQ7.5以后权限是个问题,目前我也没有什么特别好的解决办法,把认证通道关闭就可以正常使用。

下面是IBM 官方的解释,可惜我没调通,望高人指点!

疑问

您使用MQ 7.1或者7.5创建了一个新的队列管理器。然后,您尝试使用管理员账户从客户端访问该队列管理器。您得到返回值为“2035 MQRC_NOT_AUTHORIZED”的错误。

为什么在MQ 6.x或者7.0.x中,MQ管理员可以远程访问队列管理器,而不会产生任何错误?

原因

当您使用MQ 7.1或者MQ 7.5创建一个新的队列管理器的时候,MQ 7.1新引入的通道认证记录功能就默认被启用。您可以使用下列命令来查看该设置。

$ runmqsc QmgrNameDISPLAY QMGR CHLAUTHAMQ8408: Display Queue Manager details.QMNAME(TEST01) CHLAUTH(ENABLED)

在默认情况下,创建队列管理器会产生下列三条通道认证记录:$ runmqsc QmgrName

DISPLAY CHLAUTH(*)AMQ8878: Display channel authentication record details.CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP)ADDRESS(*) USERSRC(CHANNEL)AMQ8878: Display channel authentication record details.CHLAUTH(SYSTEM.*) TYPE(ADDRESSMAP)ADDRESS(*) USERSRC(NOACCESS)AMQ8878: Display channel authentication record details.CHLAUTH(*) TYPE(BLOCKUSER)USERLIST(*MQADMIN)

其中,最后一条记录拦截所有以MQ管理员身份的远程通道访问。非管理员用户在赋予一定权限的情况下仍然可以远程连接队列管理器,而管理员用户和匿名用户被禁止连接。这意味着在新版本MQ中,队列管理器更加安全。当然,这就需要显式定义管理权限。另外,需要注意以下几点:

a)如果升级一个队列管理器到MQ 7.1,那么这个新功能默认是关闭的。

$ runmqsc QmgrNameDISPLAY QMGR CHLAUTHAMQ8408: Display Queue Manager details.QMNAME(TEST01) CHLAUTH(DISABLED)

当然,您可以使用如下命令开启该功能。

ALTER QMGR CHLAUTH(ENABLED)

b) 如果您使用MQ资源管理器远程访问新创建的MQ 7.1队列管理器,会得到如下错误:

关闭该对话框后,弹出另外一个对话框:

该错误表明MQ资源管理器不能远程连接到队列管理器。

c) 从错误日志中,可以看到错误AMQ9776或者9777,然后还有AMQ9999。

c.1) AMQ9776: Channel was blocked by userid

c.2) AMQ9777: Channel was blocked

c.3) AMQ9999: Channel 'SYSTEM.ADMIN.SVRCONN' to host 'x (9.49.x.x)' ended abnormally.

以上错误表明远程连接符合某条通道认证记录,从而被拦截。

答案

1) 如果在生产环境中,建议使用非管理员账户访问队列管理器,而不是管理员账户。

2) 如果您一定要使用MQ管理员账户远程访问队列管理器,您可以采取以下措施。

2.a) 您可以参考下面的资料,添加两条通道认证记录。

http://www.websphereusergroup.org/go/article/view/251913/whats_new_in_websphere_mq_v7.1_security

第10页: 用户ID拦截

第一条记录拦截所有的管理员用户及“nobody”用户。

$ runmqsc QmgrName

SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('nobody','*MQADMIN')

第二条记录对管理员账户开放了SYSTEM.ADMIN通道的访问,只拦截“nobody”用户。这里,MQ假设其它的通道认证记录或者用户安全出口可以完成对管理员账户的认证。

SET CHLAUTH(SYSTEM.ADMIN.*) TYPE(BLOCKUSER) USERLIST('nobody')同样,上面的记录适用于SYSTEM.ADMIN.SVRCONN通道,可以被MQ资源管理器使用。

如果您使用其它的自定义的通道,例如MY.ADMIN.SVRCONN。您需要定义如下记录:

SET CHLAUTH(MY.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) USERSRC(CHANNEL)SET CHLAUTH(MY.ADMIN.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody')

注意:我们不建议用户连接SYSTEM.DEF.*通道。这些系统定义的通道是定义其它用户通道的模板。不建议用户使用SYSTEM.DEF.*和SYSTEM.AUTO.*通道。

2.b)该方法是2.a)的一个演变,但是只允许管理员账户从特定主机连接。

第一条规则拦截“nobody”用户。

SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody')

第二条规则删除所有对SYSTEM.ADMIN.SVRCONN通道的访问。

SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) ACTION(REMOVE)

第三条规则添加一个访问入口。

SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(9.27.4x.7y) USERSRC(CHANNEL)

2.c) 停止通道认证功能。

ALTER QMGR CHLAUTH(DISABLED)

警告:对于生产环境,停止该功能是不推荐的。因为停止该功能,将导致队列管理器接受所有的管理权限的连接,这就需要用户付出更大的努力去管理这些连接。因此,出于安全考虑,请保持通道认证记录功能启用。同时,使用MQ 7.1的其它功能完成连接认证。

MQ7.5以后的权限问题解决的更多相关文章

  1. virtualbox共享文件夹无访问权限问题解决方法

    virtualbox共享文件夹无访问权限问题解决方法 早就困扰了,这次新装虚拟机又碰到了,记录下来. 这篇文章主要介绍了virtualbox共享文件夹无访问权限问题解决方法,造成这个问题的原因是不跟v ...

  2. Maven--403权限问题解决方式(求解决)

    我的程序配置方案例如以下(大牛们相信你们不仅仅是一个传说): 目的:实现maven公布项目到tomcat以下.用eclipse一步到位调试. pom.xml配置: <plugin> < ...

  3. Android 5.x 权限问题解决方法

    android 5.x开始,引入了非常严格的selinux权限管理机制,我们经常会遇到因为selinux权限问题造成的各种avc denied困扰.  本文结合具体案例,讲解如何根据log来快速解决9 ...

  4. GitHubDesktop权限问题解决办法

    Desktop对于管理仓库非常方便.实用 很多人实用Desktop将仓库项目clone到本地 但是更新后同步时出现了如下权限错误: Error Authentication failed. You m ...

  5. Ubuntu下使用git clone 的权限问题解决方法

    问题1.sign_and_send_pubkey: signing failed: agent refused operation,执行如下语句: eval "$(ssh-agent -s) ...

  6. ubuntu usb权限问题解决

    在/etc/udev/rules.d/ 创建51-android.rules SUBSYSTEM==" SUBSYSTEM=="

  7. Linux下添加MySql组件后报无权限问题解决

    Tomcat日志报错如下: Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using pas ...

  8. IBM MQ相关 ---- 系列文章

    原 IBM websphere MQ远程队列的简单配置 转 MQ7.5以后的权限问题解决 原 MQ--API总结 转 连接IBM MQ原因码报2035的错误解决办法 原 Java连接MQ的实例 转 通 ...

  9. 在mac上访问自带服务器权限问题

    在开发中,有时候我们需要自己的在电脑上做一些网络相关的测试功能,因此,我们必须在本地上模拟网络环境. 在模拟网络环境中,经常会遇到访问权限的问题.现在我就把自己的解决办法写出来.我用的模拟服务器站点是 ...

随机推荐

  1. Bash编程(3) 命令行解析与扩展

    $@表示脚本输入的全部参数,在bash脚本中,若$@增加引号("$@"),则包含空格的参数也会被保留,若不增加引号($@),则包含空格的参数会被拆分. 例: # sa脚本内容如下: ...

  2. bzoj 5315: [Jsoi2018]防御网络

    Description Solution 考虑每一条边的贡献 对于树边,如果两边各存在一个点,那么有贡献,总贡献就是 \((2^{size}-1)*(2^{n-size}-1)\) 分别对应两边的 \ ...

  3. javascript typeof 和 instanceof 的区别和联系

      这篇文章是我看完<JavaScript高级程序设计(第2版)>书籍的随笔文章,目的只有一个,以备自己和网友们方便参考和记忆! typeof是什么?       typeof 是一个操作 ...

  4. [转]Newtonsoft JSON how to dynamically change the date format?

    本文转自:http://www.howtobuildsoftware.com/index.php/how-do/cg8K/jsonnet-newtonsoft-json-how-to-dynamica ...

  5. 利用WebBrowser控件实现百度自动搜索

    (1)新建一个MFC对话框项目 (2)对话框中添加WebBrower控件,添加方法:点击菜单栏工具->选择工具箱项->在弹出的选择工具箱项对话框选择COM组件->Microsoft  ...

  6. 了解:C#三维数组和锯齿数值

    此文章,只需了解,用到的不多. string[,,] three = new string[2, 3, 5];  //定义一个三维数组,给数组分别辅助2,3,5 对此数组的解释://有2个二维数组,每 ...

  7. 关于asp.net假分页的删除操作的随笔

    作为一个新人,上周负责优化一个后台管理系统,遇到一个问题:点击删除按钮之后,页面又回到了第一页. 而我需要达到的效果是:点击了删除按钮之后,原来是那一页,删除后还是在那一页. 由于项目是已经验收了的, ...

  8. MongoDb 学习笔记(一) --- MongoDb 数据库介绍、安装、使用

    1.数据库和文件的主要区别 . 数据库有数据库表.行和列的概念,让我们存储操作数据更方便 . 数据库提供了非常方便的接口,可以让 nodejs.php java .net 很方便的实现增加修改删除功能 ...

  9. Python基础学习总结(五)

    7.用户输入输出和while循环 1.使用函数 input() 输入,print() 打印,字符串可以用逗号隔开.end=' ' 关键字参数,打印时可以不换行,sep=‘ 你想要的分隔符 ’,关键字参 ...

  10. flight学习笔记

    Flight::db()-> getOne("select 1"); 返回结果:1 Flight::db()-> getRow ("select 1, 2 f ...