持久性存储库可以包含临时存储的消息文件以及其他信息。 由于这些消息可能包含专用信息,因此保护数据存储库以防止未经授权的访问非常重要。本节介绍了如何保护基于文件或基于 JDBC 的数据存储库中的数据。
使用基于文件持久性的代理将持久性数据写入平面文件数据存储库,该数据存储库的位置因平台而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置):
…/instances/ instanceName/fs350/
其中 instanceName 是标识代理实例的名称。
instanceName/fs350/ 目录是在第一次启动代理实例时创建的。保护此目录的过程取决于运行代理的操作系统平台:
在 Solaris 和 Linux 上,目录的权限由启动代理实例的用户的文件模式创建掩码 (umask) 确定。因此,可以通过适当地设置掩码来限制启动代理实例及读取其持久性文件的权限。或者,管理员(超级用户)也可以通过将 instances 目录的权限设置为 700 来保护持久性数据。
在 Windows 上,可以使用 Windows 操作系统提供的机制来设置目录的权限。 这通常涉及打开目录的“属性”对话框。
使用基于 JDBC 持久性的代理将持久性数据写入符合 JDBC 的数据库。对于由数据库服务器管理的数据库(如 Oracle), 建议创建一个用户名和密码来访问 Message Queue 数据库表(名称以 IMQ 开头的表)。如果数据库不允许保护单个表,请创建一个仅由 Message Queue 代理使用的专用数据库。请参见数据库供应商提供的文档,以了解有关如何创建用户名/密码访问的信息。
代理打开数据库连接所需的用户名和密码可以作为代理配置属性来提供。但是,一种更安全的方法是在启动代理时将它们作为命令行选项(使用 imqbrokerd 命令的 -dbuser 和 -dbpassword 选项)提供(请参见代理实用程序)。
对于代理通过数据库 JDBC 驱动程序直接访问的嵌入式数据库,通常通过在要存储持久性数据的目录上设置文件权限来提供安全性,如前面的保护基于文件的存储库中所述。但是,要确保代理和数据库管理器实用程序均可读写数据库,二者应该由同一个用户来运行。