文章
· 九月 14, 2022 阅读大约需 6 分钟

第三十二章 管理许可(五)

第三十二章 管理许可(五)

Identifying Users

IRIS 许可系统识别不同的用户并为每个用户分配一个许可单元。用户由许可证用户 ID 标识,该 ID 可以是 IP 地址、用户名、Web 会话 ID 或其他标识符,具体取决于用户的连接方式。

由单个用户启动或为单个用户启动的多个进程共享一个许可证单元,最多可达每个用户的最大进程数。如果进程数超过此最大值,则会发生转换 IRIS 开始为该用户 ID 的每个进程分配一个许可单元。系统假设如果与用户 ID 关联的进程数超过最大值,则多个用户正在通过中介(例如防火墙系统)访问 IRIS,因此需要额外的许可证单元。 (由 Job 命令启动的进程计入调用该命令的用户 ID 下。)

即使用户 ID 下的进程数回落到最大值以下, IRIS仍会继续为该用户 ID 的每个进程分配一个许可单元。只有当用户 ID 的所有连接都关闭并且用户 ID 下没有更多进程时,许可证分配才会重置为该用户 ID 的一个单位。

通过名称识别用户的应用程序消除了与使用基于客户端 IP 地址、Web 会话 ID 或其他连接派生用户 ID 的默认用户 ID 相关的问题。

例如,当使用防火墙或终端服务器软件时, IRIS 无法区分连接用户,因此它依赖于最大连接转换规则。使用来自同一客户端的混合连接也使得无法使用自动 ID 创建适当地计算用户数。

当用户名用作许可证标识符时,这些问题就消失了。随着组织实施新的访问和审计要求,准确的用户识别的重要性预计会增加。使用用户身份来控制许可证合规性是这一趋势的自然必然结果。

许可证登录

许可证登录有两种模式:自动和显式。自动登录是默认设置。许可系统识别客户端的 IP 地址并将其用作许可用户 ID。当客户端使用 IP 直接连接到服务器时,这很有效。如果防火墙在客户端和服务器之间进行干预,则效果不佳;所有客户端似乎都具有相同的 IP 地址。当终端服务器与 telnet 协议一起使用时,自动登录无法区分用户,因为 IRIS 看到所有终端服务器端口的单个 IP 地址。由于所有连接都源自同一地址,因此所有连接都具有相同的用户 ID。如果用户通过防火墙连接或使用终端服务器的 telnet 传输,请使用显式登录。

IP 不用作网络传输时,IP 地址不可用作许可证用户 ID。在这些情况下,许可系统使用各种其他来源作为许可用户 ID。由 UNIX®/Linux 系统上的 at 守护程序启动的批处理是另一种特殊情况。此类进程不共享许可证单元,因为它们与用户无关。对于这些进程,进程 ID 用作许可证标识符。

当选择显式登录时, IRIS 不会自动检测用户 ID。应用程序必须显式调用 $System.License.Login(UserIdentifier) 方法来提供许可证用户 ID 并获取许可证。

通过调用 $System.License.DeferUserIdentification([0 or 1]) 函数启用显式登录。可以在实例启动时从 ^%ZSTART 例程中的 SYSTEM 入口点进行此调用。如果参数值为 1,则在登录时延迟获取许可证,因此可以执行显式登录。如果参数值为 0,则在进程启动时自动获取许可证。

当延迟登录时,必须立即调用许可登录方法。未执行许可证登录的进程在其前 4000ObjectScript 命令后暂停,之后每 1000ObjectScript 命令暂停。

对于自动登录无法处理的任何情况,请使用显式登录。重要的是要记住,即使配置了自动登录,也始终可以调用 $System.License.Login(UserIdentifier) 以使用显式用户标识进行许可。

用户名许可

可以使用 $USERNAME 的值来识别许可用户。在不能仅使用 IP 地址可靠地识别不同用户的情况下,这可以实现更准确的计数。

可以类中使用 %SYSTEM.License$SYSTEM.License.UserNameLicensing() 方法修改指定许可证用户 ID 的方式。默认情况下,IRIS 使用客户端 IP 地址来识别许可证跟踪子系统的用户。如果安装的 IRIS 的初始安全设置高于 Minimal,则每个进程都有一个用户 ID ($USERNAME)。可以调用 $SYSTEM.License.UserNameLicensing() 系统方法来使 IRIS 许可子系统使用 $USERNAME 作为许可用户标识符。

$SYSTEM.License.UserNameLicensing() 方法修改系统状态。也可以从 SYSTEM^%ZSTART 调用它以在实例启动时启用用户名许可。该方法具有以下功能:

  • $SYSTEM.License.UserNameLicensing(1) — 启用基于 $USERNAME 的许可并返回之前的状态。
  • $SYSTEM.License.UserNameLicensing(0) — 禁用基于 $USERNAME 的许可并返回之前的状态。
  • $SYSTEM.License.UserNameLicensing() — 返回当前状态。如果使用特殊登录规则的许可证类型的参数调用,可能会返回错误。

例如,以下显示当前是启用还是禁用用户名许可:

Write " 1-enabled, 0-disabled",!

USER>Write $SYSTEM.License.UserNameLicensing()
0

以下示例启用,然后禁用用户名许可:

 Set RC=$SYSTEM.License.UserNameLicensing(1)
 Write RC,!
 Set RC=$SYSTEM.License.UserNameLicensing(0)
 Write RC

许可证登录特殊注意事项

请记住以下有关许可证登录的特殊注意事项:
- CSP 连接是登录的一种特殊情况。 强烈建议 CSP 应用程序在等效方法 %CSP.Session.Login 中使用 %CSP.Session 来识别用户以用于许可目的。如果没有,则使用 Web 会话 ID 作为许可证用户 ID。每个会话消耗一个许可证单元,这在许多情况下是不合适的。例如,用户可以同时打开多个浏览器窗口。或者,用户可以通过多个路径进行连接。在这种情况下,可以方法 %CSP.Session.Login(username, password) 中使用 %CSP.Session 来为会话执行显式许可证登录。

注意:当 CSP 会话结束(从注销或超时)并且用户只访问了一个页面时,CSP 不会立即释放许可证。相反,CSP 会为该用户保留最多 10 分钟的宽限期的许可证。

  • 匿名 SOAP 请求(即不需要实例身份验证的 SOAP 请求)消耗一个许可证单元至少 10 秒;但是,任何标识用户的 SOAP 请求都需要许可证,因为它被视为“用户请求”。
  • IRIS 不区分后台进程并以不同方式计算它们。如果一个用户进程启动另一个进程,则该子进程将计入用户的总体最大进程限制。
  • 使用新任务页面(系统操作 > 任务管理器 > 新任务)创建的每个任务使用一个许可单元,其许可用户 ID 基于 IRIS 用户名作为此用户选择器和环回 IP 地址 127.0.0.1,该地址将转换为主机 IP 地址。这可确保将作为给定用户在不同主机上运行的任务一起计入识别用户中讨论的该用户的最大进程限制。

  • 由用户启动例程(^%ZSTART,或更旧的^ZSTU^ZMIRROR)启动的进程是另一种特殊情况。运行例程的进程没有父进程。因此,在调用例程之前对用户 ID User Startup 执行登录。由例程中的 Job 命令启动的进程具有此用户 ID。可以从例程中调用 $System.License.Login(UserId) 来更改用户 ID。此过程意味着该例程可以启动最多比 maxconn 后台进程少一个,并且只消耗一个许可证。如果根据许可条款和条件,这些进程应该有单独的许可证(例如,如果它们驱动需要单独许可证的实验室设备),则需要调用 $System.License.Login(UserId) 来获取适当用户 ID 的许可证。

讨论 (0)1
登录或注册以继续