使用 Websphere MQ 6 授权

2024-03-04

我在运行 Windows Server 2003 的虚拟机上安装了 IBM 的 WebSphere MQ 版本 6 的服务器端,该虚拟机位于 Vista 桌面上。桌面已安装客户端。

我有一个小测试程序(来自他们的代码示例),它将一条消息放入队列中并再次将其取出。当直接使用服务器绑定在服务器上运行时,该程序可以正常工作。但是,我无法通过客户端绑定让它在客户端工作。

我收到的错误是 CompCode 2,Reason 2035,这是授权失败。

我怀疑这与程序默认在我的用户下运行这一事实有关,该用户位于虚拟机不知道(也无法访问)的域上。

我已经在虚拟机上设置了一个本地用户,我想将其连接为(用户:websphere,密码:websphere),但我不清楚如何让这一切正常工作。我有下面使用的代码,并且我已经尝试了通道和端点上安全退出设置的各种组合,但我无法摆脱 2035。

有人有这方面的经验吗?非常感谢您的帮助!

Code:

using System;
using System.Collections;

using IBM.WMQ;

class MQSample
{
    // The type of connection to use, this can be:-
    // MQC.TRANSPORT_MQSERIES_BINDINGS for a server connection.
    // MQC.TRANSPORT_MQSERIES_CLIENT for a non-XA client connection
    // MQC.TRANSPORT_MQSERIES_XACLIENT for an XA client connection
    // MQC.TRANSPORT_MQSERIES_MANAGED for a managed client connection
    const String connectionType = MQC.TRANSPORT_MQSERIES_CLIENT;

    // Define the name of the queue manager to use (applies to all connections)
    const String qManager = "QM_vm_win2003";

    // Define the name of your host connection (applies to client connections only)
    const String hostName = "vm-win2003";

    // Define the name of the channel to use (applies to client connections only)
    const String channel = "S_vm_win2003";

    /// <summary>
    /// Initialise the connection properties for the connection type requested
    /// </summary>
    /// <param name="connectionType">One of the MQC.TRANSPORT_MQSERIES_ values</param>
    static Hashtable init(String connectionType)
    {
        Hashtable connectionProperties = new Hashtable();

        // Add the connection type
        connectionProperties.Add(MQC.TRANSPORT_PROPERTY, connectionType);

        // Set up the rest of the connection properties, based on the
        // connection type requested
        switch (connectionType)
        {
            case MQC.TRANSPORT_MQSERIES_BINDINGS:
                break;
            case MQC.TRANSPORT_MQSERIES_CLIENT:
                connectionProperties.Add(MQC.HOST_NAME_PROPERTY, hostName);
                connectionProperties.Add(MQC.CHANNEL_PROPERTY, channel);
                connectionProperties.Add(MQC.USER_ID_PROPERTY, "websphere");
                connectionProperties.Add(MQC.PASSWORD_PROPERTY, "websphere");
                break;
        }

        return connectionProperties;
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static int Main(string[] args)
    {
        try
        {
            Hashtable connectionProperties = init(connectionType);

            // Create a connection to the queue manager using the connection
            // properties just defined
            MQQueueManager qMgr = new MQQueueManager(qManager, connectionProperties);

            // Set up the options on the queue we wish to open
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

            // Now specify the queue that we wish to open,and the open options
            MQQueue system_default_local_queue =
              qMgr.AccessQueue("clq_default_vm_sql2000", openOptions);

            // Define a WebSphere MQ message, writing some text in UTF format
            MQMessage hello_world = new MQMessage();
            hello_world.WriteUTF("Hello World!");

            // Specify the message options
            MQPutMessageOptions pmo = new MQPutMessageOptions(); 
            // accept the defaults,
            // same as MQPMO_DEFAULT

            // Put the message on the queue
            system_default_local_queue.Put(hello_world, pmo);

            // Get the message back again

            // First define a WebSphere MQ message buffer to receive the message
            MQMessage retrievedMessage = new MQMessage();
            retrievedMessage.MessageId = hello_world.MessageId;

            // Set the get message options
            MQGetMessageOptions gmo = new MQGetMessageOptions(); //accept the defaults
            //same as MQGMO_DEFAULT

            // Get the message off the queue
            system_default_local_queue.Get(retrievedMessage, gmo);

            // Prove we have the message by displaying the UTF message text
            String msgText = retrievedMessage.ReadUTF();
            Console.WriteLine("The message is: {0}", msgText);

            // Close the queue
            system_default_local_queue.Close();

            // Disconnect from the queue manager
            qMgr.Disconnect();
        }

        //If an error has occurred in the above,try to identify what went wrong.

        //Was it a WebSphere MQ error?
        catch (MQException ex)
        {
            Console.WriteLine("A WebSphere MQ error occurred: {0}", ex.ToString());
        }

        catch (System.Exception ex)
        {
            Console.WriteLine("A System error occurred: {0}", ex.ToString());
        }

        Console.ReadLine();
        return 0;
    }//end of start
}//end of sample

对于 Windows 到 Windows 连接,WMQ 将传递 SID 以及“短 ID”,在本例中为“websphere”。这比使用仅使用短 ID 的非 Windows WMQ 获得的授权要好一些。问题是非 Windows 服务器上的某人可以使用短 ID“websphere”进行连接,并且由于没有 SID,WMQ 会按照预期接受连接wereWindows 帐户。

有两种方法可以解决这个问题。在 QMgr 主机上,您可以运行 setmqaut 命令来授权您实际用于连接的 SID。虚拟机must能够查询 Windows 帐户所在的域,并且 setmqaut 命令必须使用 -p user@domain 语法。

或者,您可以只使用通道的 MCAUSER 中本地定义的 ID,例如

ALTER CHL(通道名称) CHLTYPE(SVRCONN) MCAUSER('webaphere@vm')

...其中“vm”是虚拟机的名称,并且您已使用 setmqaut 命令或将其放入 mqm 或管理员组来授权该帐户。

请记住这是only供测试用!任何具有空白或管理 MCAUSER 的通道不仅可以管理 WMQ,还可以在底层主机服务器上执行任意命令。在现实世界中,您将创建有权访问队列和 QMgr 但无法访问管理的帐户,并且您会将这些帐户放入所有 MCAUSER 值中,然后为所有 SYSTEM.DEF 和 SYSTEM.AUTO 通道设置 MCAUSER('nobody') 。

有关此内容的更多信息,请访问我的网站 t-rob.net 的 MQ 和链接页面。另外,请查看:

评论行:T.Rob Wyatt:关于 WebSphere MQ 安全性,您所不知道的事情 http://www.ibm.com/developerworks/websphere/techjournal/0701_col_wyatt/0701_col_wyatt.html

评论行:T.Rob Wyatt:WebSphere MQ 安全性升温 http://www.ibm.com/developerworks/websphere/techjournal/0711_col_wyatt/0711_col_wyatt.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Websphere MQ 6 授权 的相关文章

  • Docker Tooling for Eclipse - 如何连接到虚拟机内运行的 Docker 守护进程

    我有一个 docker 守护进程 引擎在里面运行guest Ubuntu 虚拟机 并根据适用于 Eclipse 的 Docker 工具 http tools jboss org blog 2015 03 30 Eclipse Docker
  • 有没有办法更改 Nifi 中 PublishJMS 处理器的交付模式?

    我使用 Nifi PublishJMS 处理器向 IBM MQ 发送消息 消息在 MQ 中具有持久性 持久性 我想将其更改为非持久性 Nifi PublishJms 处理器中是否有属性可以纠正此问题 或者是从MQ端完成的 我无权访问 MQ
  • [Authorize] 失败后显示 404 错误页面

    我有一个操作想限制为仅角色 管理员 我是这样做的 Authorize Roles Admin public ActionResult Edit int id 手动进入 Controller Edit 1 路径后 我被重定向到登录页面 好吧
  • 未在虚拟机内分配外部 IP

    我正在尝试设置几个 Centos 6 虚拟机 我为它们分配了静态 IP 但运行 ifconfig 时 我看不到外部 IP 只看到内部 IP Google 不允许这种功能吗 除了Anderson所说的之外 这是从实例本身查询外部IP的命令 c
  • JACC 提供程序如何使用其部署的服务器的主体到角色映射功能?

    我正在写一个JACC提供者 在此过程中 这意味着实施PolicyConfiguration http download oracle com javaee 6 api javax security jacc PolicyConfigurat
  • 将触发器监视器作为 MQ 服务对象 - 如何获取状态

    我创建了一个 MQ 服务对象来运行我的触发器监视器 DEFINE SERVICE TriggerMonitor CONTROL QMGR STARTCMD C Program Files x86 IBM WebSphere MQ bin r
  • 单元测试 AuthorizationHandler

    我在 NET Core 2 1 中使用了基于资源的授权模式 如下所述 我唯一的问题是我不知道如何测试我的AuthorizationHandler干净地 这里有人已经做过类似的事情了吗 AuthorizationHandler示例 来自上面的
  • WCF net.tcp 绑定、消息格式和安全问题

    很抱歉问了一些愚蠢的问题 但有些事情我无法理解 对于以下问题的一些建议将不胜感激 在非常基础的层面上 WCF 使用二进制 Net Tcp HTTP 或 MSMQ 在线传输消息是否正确 然而 在所有情况下 无论数据如何传输 消息本身都是带有标
  • RESTful服务中的资源级授权

    Let users id 是 RESTful 服务中的资源 url 启用基本身份验证 仅允许经过身份验证的用户访问该 url 示例场景 User 1 User 2是通过 userId 1 和 2 进行身份验证的用户 由于两者都经过身份验证
  • 如何发出 JMS 同步请求

    我有一个 Web 应用程序 预计将从外部应用程序获取和显示数据 该外部应用程序只能通过消息传递 JMS 访问 因此 如果用户在浏览器上提交请求 则同一 HTTP 请求线程将必须与消息系统 MQ 系列 交互 以便同一请求线程可以显示从消息系统
  • Powershell Invoke-RestMethod 授权标头

    当调用一个Invoke RestMethod使用 Powershell 例如 Invoke RestMethod Method Get Uri https google com api GetData Headers headers and
  • 将自定义标头值传递给 IdentityServer4 Login

    当用户尝试登录时 我尝试将自定义标头值 无 cookie 传递给 IdentityServer4 这是所有设置的方式 自定义身份验证属性 AttributeUsage AttributeTargets Class AttributeTarg
  • ASP.NET MVC - 角色提供程序的替代方案?

    我试图避免使用角色提供程序和成员资格提供程序 因为在我看来它太笨拙了 因此我试图制作自己的 版本 它不那么笨拙并且更易于管理 灵活 现在我的问题是 除了角色提供者之外 还有其他不错的选择吗 我知道我可以自定义角色提供者 会员提供者等 通过更
  • Rails 3 公司帐户具有许多用户,限制对数据的访问

    我想知道在我的应用程序中构建身份验证 授权的最佳方法 我希望有 许多公司帐户 可能使用子域 帐户有很多用户 用户只能访问自己或具有相同帐户的其他用户创建的记录 我所做的研究提供了许多混合搭配的想法 以奇怪而美妙的方式组合 devise ca
  • 需要 python 接口将机器移动到另一个文件夹

    我正在尝试寻找代码支持python为了在数据中心的文件夹之间移动机器但没有成功 我看到pysphere您可以在克隆阶段定义文件夹 而不是在机器克隆之后定义文件夹 This https jackiechen org 2011 11 01 mo
  • 具有用于角色授权的空间的 AD 组

    我正在尝试获得与 AD 组合作的角色授权 然而 由于它包含空格 它似乎不起作用 我尝试过没有空格的 AD 组 它们工作得很好
  • 如何在CentOS7中更改docker守护进程根目录

    我在 CentOS7 上运行 docker 我想更改我的基本目录 var lib docker to data docker I found this https docs docker com engine reference comma
  • AllowAnonymous 与 OverrideAuthorizeAttribute

    AllowAnonymous 和 OverrideAuthorizeAttribute 的使用有什么区别 是一样的吗 http www asp net web api overview security authentication and
  • 将策略应用到资源控制器

    我有一个CRUD资源定义通过Route resource User UserController 既然可以生成CRUDGates and Policies 有没有办法应用这样的Gate Policy 以便将相应的Gate Policy应用于
  • server-conn 和 client-conn 通道是唯一可以拥有多个实例的通道吗?

    我无法找到获取其他频道类型的方法 例如发送者通道 可以是多个实例 没有任何记录反对这一点 我假设只有连接通道可以有多个实例 它是否正确 Thanks 可以具有多个实例的通道包括客户端使用的通道 MQI 通道 和 QMgrs 使用的通道 MC

随机推荐