#Caché

0 关注者 · 975 帖子

  

InterSystems Caché 是一个多模型 DBMS 和应用服务器。

查看此处提供的更多详细信息

文档

文章 姚 鑫 · 十月 5, 2022 3m read

第七章 CSP 架构 - URL 的 Web 服务器配置

URLWeb 服务器配置

提供了一个默认的 /csp 虚拟目录来运行 CSP 应用程序。如果正在运行多个 Caché 实例,它还提供了一个默认虚拟目录 /cacheinstance/csp 以供使用。如果正在运行多个 Caché 实例并使用虚拟目录 /csp 访问 CSP 应用程序,而之前没有 /cacheinstance,它将访问最后安装的 Caché 版本。如果计划允许使用以 http://localhost/csp 或 http//localhost/cacheinstance/csp 开头的应用程序路径调用所有 CSP 应用程序,则无需在 Web 服务器中进行任何更改配置。

如果要创建一个应用程序路径不是以 /csp/cacheinstance/csp 开头的 CSP 应用程序,则需要在 Web 服务器配置文件条目中进行更改,别名 /csp

下表显示了需要更改的配置文件。

网络服务器配置文件
ApacheHP 安全网络服务器UNIX®: /etc/httpd/conf/httpd.confWindows: <web-server-install-directory>\conf\httpd.conf
Sunconfig/obj.conf and config/magnus.conf
Microsoft IIS如“在 Microsoft IIS Web 服务器上配置新 URL”中所述定义虚拟目录。

下表显示了使用 Web 服务器和 Caché 实例的组合访问 CSP 页面的示例:

URLweb serverInstance
http://localhost/cache20071/csp/samples/menu.csppubliccache20071
http://localhost/cache52/csp/samples/menu.csppubliccache52
http://localhost/csp/samples/menu.csppublic安装的最新版本的 Caché
http://localhost:57772/csp/sys/UtilHome.cspprivate — 用于访问管理门户和在线文档使用网络服务器端口 57772 安装的 Caché 版本

注意:CSP 区分大小写。在配置 CSP 时一致地指定路径名称。

Microsoft IIS Web 服务器上配置新 URL

Microsoft IIS 是通过定义一系列虚拟目录来配置的。每个虚拟目录都包含一个名称(对应于 URL 的目录部分);物理目录(如果选择从 Web 服务器提供静态文件,则可以在其中存储静态文件(例如 .html.jpg)的本地目录);和一组权限(例如 readexecute )。

CSP 内容的任何请求 (URL) 都包含目录名称。此目录名称必须对应于 Web 服务器定义的虚拟目录或虚拟目录的子目录。此虚拟目录必须至少具有定义的读取和执行权限,才能提供 CSP 内容。

如果选择从 Web服务器提供静态文件,则 Web 服务器会在为虚拟目录定义的物理目录中查找静态文件(例如 .html.jpg)。 Web服务器和 Caché 服务器都不会在物理目录中查找 .csp 文件; .csp 文件存储在运行 Caché 服务器的机器中。如果 Web 服务器和 Caché 都在同一台机器上运行(例如,在应用程序开发期间建议),那么两者可能会巧合地在同一位置查找静态和 .csp 文件 — 这就是 Caché 配置自身和安装期间的本地 Web 服务器。

在安装过程中,会检测 IIS 服务器是否正在运行并尝试对其进行配置以定义名为 /csp 的虚拟目录。这就是对 /csp/samples/csp/user(它们是 /csp 的子目录)的请求都发送到本地 安装的方式。

如果添加新的 CSP 应用程序,如果新应用程序的 URL路径也以 /csp 开头,则无需执行任何 IIS 配置。例如,/csp/myapp 使用为 /csp 定义的 IIS 虚拟目录。如果您不希望应用程序路径以 /csp 开头,那么需要为 IIS 定义一个与应用程序路径相对应的新虚拟目录。

例如,要定义使用 URL 路径 /myappCSP 应用程序,请执行以下操作:

  1. 打开 IIS 管理器(注意:每个版本的 Windows 都有其独特的方法;通常可通过 Windows 控制面板获得)。
  2. 通过右键单击 Default Web Site 并选择 New > Virtual Directory 来定义一个名为 /myapp 的虚拟目录。
  3. 授予此目录的读取和执行权限。
  4. 如果希望 Web 服务器提供静态内容,请指定计划存储静态内容的物理目录。

还必须执行其他 CSP 网关和 CSP 服务器配置,如以下部分所述。

0
0 146
文章 姚 鑫 · 十月 4, 2022 3m read

第六章 CSP 架构 - 静态文件

静态文件

数据库服务器为所有 CSP 提供服务。 数据库服务器还可以通过 CSP 网关为 Web 应用程序提供任何类型的静态文件。在标准 Web 应用程序中,Web 服务器通常提供静态内容。要在 Caché 上运行 Zen 应用程序,必须配置 Web 服务器以允许服务器通过 CSP 网关提供所有静态文件。

注意:要运行基于 Zen 的应用程序,请启用“服务文件”选项并配置 Web 服务器以允许 Caché 服务器提供静态文件。然后 Zen 框架将能够提供依赖图像和 JavaScript 帮助文档。

指示字符编码

CSP 引擎通过流服务器以与主流 Web 服务器一致的方式处理静态文件,以确定 JavaScript 文件的字符编码。

现代惯例是将所有 JavaScript 文件标记为 application/javascript Content-Type,并且确保页面上使用的所有 JavaScript 文件都是这种情况。

以这种方式标记的 JavaScript 文件:

  • 如果文件包含 BOM(字节顺序标记),浏览器会自动检测到这一点并使用正确的字符集来读取它。
  • 如果该文件不包含 BOM,则浏览器假定该文件是 UTF-8

如果需要覆盖此行为以指定 JavaScript 文件的字符集,请将全局 ^%SYS("CSP","MimeFileClassify","JS") 设置为列表值 $listbuild(contenttype, binary, charset)。例如,

SET ^%SYS("CSP", "MimeFileClassify", "JS") = $listbuild("text/javascript", 0 ,"ISO-8859-1") 

这将设置较旧的内容类型并使用 ISO-8859-1 字符集。此外,如果 转换表被定义为非空字符串或全局节点 ^%SYS("CSP","DefaultFileCharset") 设置为空值,则 将为所有 JavaScript 使用此字符集和其他文本文件。默认情况下,这些全局节点均未设置。

启用服务文件选项

CSP 应用程序的“服务文件”选项打开(始终)或关闭(否),或者 CSP 网关可以缓存 Web 服务器上的静态文件(始终和缓存)。 Always and cached 设置提高了效率,因为系统可以提供缓存的静态页面而无需返回到 Caché 服务器)。要运行 Zen 应用程序,必须使用始终或始终和缓存设置启用服务文件选项。

配置 Web 服务器以允许缓存服务器提供静态文件

配置 Web 服务器以允许 Caché 服务器提供静态文件。

默认情况下,提供的安装脚本不会查找或配置外部 Web 服务器。如果运行自定义安装,可以选择该选项来配置任何以前安装的 IIS 或 Apache Web 服务器以启用 CSP 支持。安装脚本创建 /csp 虚拟目录,并为要由网关处理的 .csp.cls.zen.cxw 扩展创建映射。这足以使 CSP 通过该 Web 服务器正常运行。它不支持服务文件功能。为此,必须手动配置 ApacheIIS 以映射要通过网关处理的特定文件扩展名。这是设计使然,因为通过这种机制将数据库服务器暴露在外是一种安全风险,不应该以无形的方式进行。

从 Web 服务器提供静态文件

如果愿意,仍然可以使用从 Web 服务器提供静态页面的传统配置,例如,如果已经以这种方式设置了 Web 应用程序。 (在这种情况下,Static Files 选项的设置无关紧要。)当一个公共 Web 服务器为两个不同版本的 提供服务时,这消除了争用,每个版本都需要某些静态文件的不同版本(例如,hyperevent broker 组件)。

如果您已将 Web 服务器本身配置为提供静态文件,请确保静态内容存在于每台 Web 服务器上。

0
0 114
文章 姚 鑫 · 十月 3, 2022 2m read

第五章 CSP 架构 - 组件,信息流

CSP 组件:Web 服务器、CSP 网关、CSP 服务器

CSP 使用三个软件组件:Web 服务器、CSP 网关和 CSP 服务器(在 Caché 服务器上运行):

  • CSP 组件

Web服务器和CSP服务器可以由一台或多台计算机实现。在开发过程中,所有三个组件(Web 服务器、CSP 网关和 CSP 服务器)可能都位于一台 PC 上。在大规模部署中,可能有多个 Web 服务器和 CSP 服务器采用两层或三层配置。

这些组件(Web 服务器、CSP 网关、CSP 服务器)视为各有一个。它将 CSP 描述为好像只提供 HTML 页面,尽管 CSP 也可以提供 XML 页面,以及其他文本格式和二进制格式,例如图像。

每个组件的作用

Web 服务器是一个软件实用程序,它执行以下操作:

  • 接受传入的 HTTP 请求,通常来自浏览器
  • 检查权限
  • 可以提供静态内容
  • CSP 网关发送对 CSP 内容(以 .csp.cls 结尾的 URL)的请求

CSP 网关是一个共享库、一个 .dll 文件或一个 CGI 脚本。它执行以下操作:

  • 确定将请求发送到哪个 Caché 服务器。
  • 将请求发送到正确的 Caché 服务器。
  • 维护与 Caché 服务器的连接(以避免必须不断打开新连接)。

CSP 服务器是一个运行在 Caché 服务器上的进程,专门用于处理来自 CSP 网关的请求。它执行以下操作:

  • 接收应用程序的 HTTP 请求
  • 检查应用程序配置设置(在管理门户中设置并保存在 .cpf 文件中)。
  • 运行关联的类(直接编写或从 CSP 页面生成)将 HTML 发送回 CSP 网关,CSP 网关将其发送到 Web 服务器并返回到浏览器。

信息流

CSP 请求由标准 Web 服务器(支持所有领先的服务器)和标准 HTTP 协议处理。 CSP 管理 Web 服务器和 Caché 之间的通信并调用应用程序代码来生成页面。请求和返回过程如下:

  1. HTTP 客户端(通常是 Web 浏览器)使用 HTTPWeb 服务器请求页面。
  2. Web 服务器将此识别为 CSP 请求,并使用快速服务器 API 将其转发到 CSP 网关。
  3. CSP 网关确定要与之通信的 Caché 服务器,并将请求转发到该目标系统上的 CSP 服务器。
  4. Caché 中运行的 CSP 服务器处理请求并将页面返回给 CSP 网关,CSP 网关将其传递回 Web 服务器。
  5. Web 服务器将其发送到浏览器进行显示。
0
0 162
文章 姚 鑫 · 十月 2, 2022 2m read

第四章 Caché 服务器页面简介 - 通过 html 创建 csp 页面

创建基于 HTML 标记的 CSP 页面

要使用 HTML 文件创建 Hello.World 页面,请执行以下操作:

  1. 启动 Studio 并选择 File > New > CSP File > Caché Server Page
  2. 将新 CSP 文件的内容替换为以下内容:
<html>
<body>
<b>Hello, World!</b>
</body>
</html>
  1. 选择文件 > 保存。
  2. 在显示的另存为窗口中,双击默认 CSP 应用程序 csp/user
  3. 输入文件名 Hello.csp 并单击另存为以保存文件。
  4. Studio 窗口中,选择查看 > 网页。

与前面的示例一样,会看到 Hello, World!显示在浏览器中。

CSP 应用程序可以由单个 CSP 页面或一组页面组成。 CSP 应用程序作为一个单元,使用适用于整个应用程序的设置。系统提供 csp/user 作为默认的 CSP 应用程序。

还可以使用文本编辑器或 HTML 编辑器创建 HTML 文件。将此文件作为 Hello.csp 保存在本地目录 cachesys/csp/user 中(其中 cachesys 是安装 Caché 的位置)。

Hello.csp 页面的工作方式如下:

  1. 浏览器向本地 Web 服务器发送 Hello.csp 请求
  2. Web 服务器将此请求传递给 CSP 网关(连接到 Web 服务器),CSP 网关又将请求传递给 Caché CSP 服务器。
  3. Caché CSP 服务器查找文件 Hello.csp,并将其交给 CSP 编译器。
  4. CSP 编译器创建一个名为 csp.Hello 的新类,该类具有写出 Hello.csp 文件内容的 OnPage 方法。 (它实际上生成一组方法,每个方法依次从 OnPage 方法调用)。此编译步骤仅在 .csp 文件比生成的类更新时发生;随后的请求直接发送到生成的类。
  5. CSP 服务器调用新生成的 OnPage 方法,并将其输出发送到浏览器,如上例所示。

与程序开发的情况一样,这是一个出于教学原因而故意过分简化的示例。 CSP 编译器实际上是一个专门的 XML/HTML 处理引擎,它可以:

  • HTML 页面中处理服务器端脚本和表达式
  • 在识别某些 HTML 标记时执行服务器端操作。

与编程示例一样,可以通过添加编程逻辑使此页面更有趣。例如:

与编程示例一样,生成的页面显示 10 个项目的无序(项目符号)列表。

0
0 194
文章 姚 鑫 · 十月 1, 2022 2m read

第三章 Caché 服务器页面简介 - 通过 cls 创建 csp 页面

创建第一个 CSP 页面

本节介绍如何以两种不同的方式创建 Hello, World CSP 页面:

创建基于类的 CSP 页面

通过创建 %CSP.Page 的子类并覆盖其 OnPage 方法来创建 CSP 页面。通过此方法写入主设备的任何输出都会自动发送到 Web 浏览器并显示为网页。

  1. 打开Studio
  2. 选择 File > New Project 在本地数据库 USER 命名空间中创建一个新项目。
  3. 在向导的第一页上,输入 Test 作为包名,并输入 Hello 作为类名
  4. 在第二页上,选择 CSP 作为类类型。
  5. 单击完成。可以在 Studio 类编辑器中看到新的 CSP 类定义:
Class Test.Hello Extends %CSP.Page
{

ClassMethod OnPage() As %Status
{
	&html<<html>
<head>
</head>
<body>>
	; To do...
	&html<</body>
</html>>
	Quit $$$OK
}

}

  1. OnPage 方法中,替换注释:
 ; To do...

使用 Write 语句:

 Write "<b>Hello, World</b>",!
  1. 使用 Build > Compile 保存并编译新类。
  2. 选择视图 > 网页。

会在浏览器中看到 Hello, World

这个 CSP 页面也是一个 CSP 应用程序,其工作原理如下:

  1. 浏览器向指定命名空间中的本地 Web 服务器发送对 Test.Hello.cls 的请求。

  2. Web 服务器将此请求传递给 CSP 网关,CSP 网关将请求传递给 CSP 服务器。在我们的例子中,浏览器、Web 服务器和 应用程序服务器都运行在同一台机器上。在实际部署中,这些可能位于不同的机器上。

  3. CSP 服务器查找名为 Test.Hello 的类并调用其 OnPage 方法。

  4. OnPage 方法写入主体设备(使用 Write 命令)的任何输出都将发送回浏览器(通过 CSP 网关和 Web 服务器)。

这些例子展示了 CSP 的核心; CSP 的其余功能都建立在此行为之上。

以下是添加更多代码的示例。在包含 Hello, World 的行之后插入以下行:

		w "<ul>",!
		for i = 1 : 1 : 10 {
			w "<LI> This is item ", i,!
		}
		w "</ul>",!
0
0 119
文章 姚 鑫 · 九月 30, 2022 2m read

第二章 Caché 服务器页面简介 - 你应该知道

你应该知道什么

要高效使用 CSP,应该熟悉以下内容:

  • Caché objects and ObjectScript

  • HTML

  • JavaScript

  • SQL

CSP Samples

Caché 附带一组示例CSP 页面。要查看这些:

  1. 打开Caché

  2. 要查看 CSP 示例,请确保计算机上的 Web 服务器正在运行。

  3. 启动浏览器并转到 CSP 示例菜单(使用位于以下位置的私有 Web 服务器:http://localhost:57772/csp/samples/menu.csp或位于以下位置的外部 Web` 服务器:http://localhost /csp/samples/menu.csp 。

  4. 如果安装的 Caché 具有正常或锁的安全功能,则可能会显示登录页面。如果是这样,请登录。

  5. Caché 显示示例 CSP 页面的列表以及每个页面的简短描述。单击感兴趣的任何内容。

CSP 文档

可以在此处找到有关 CSP 的文档:

  • 使用 Caché Server Pages 描述了如何创建 CSP 页面
  • 使用 ZEN 描述了如何使用 ZEN,这是一个在 CSP 之上工作的包,用于使用预构建的页面对象进行更快速的 Web 应用程序开发。 Zen 文档包括使用 Zen 组件、开发 Zen 应用程序和使用 Zen 报告。
  • CSP HTML Tag Reference,对所有 CSP 标签的引用
  • CSP 示例菜单,显示了许多 CSP 页面示例。
  • Caché 服务器页面快速入门教程让入门。
  • CSP Web 应用程序教程是一个深入的教程。
  • 这些类的类参考信息
    • %CSP.Page
    • %CSP.Session

要设置或配置 CSP,请参阅以下内容:

  • CSP Web Gateway 文档是关于配置 CSP Gateway 的在线帮助,可在 CSP Web Gateway 管理页面上找到。在管理门户中,导航到系统管理 > 配置 > CSP 网关管理,然后单击帮助。默认情况下,这会将带到私有 Web 服务器。要查看生产 Web 服务器的 CSP Web 网关管理页面,请用 localhost 或localhost:<port_no> 替换 URL 中的 localhost:57772,例如:
http://localhost/csp/bin/Systems/Module.cxw
  • CSP 网关配置指南,当安装 Caché 时,CSP 网关会自动安装并适用于大多数站点。如果需要手动配置 CSP 网关,请使用高级配置指南。
0
0 175
文章 姚 鑫 · 九月 29, 2022 3m read

第一章 Caché 服务器页面简介 - 什么是CSP

Caché Server Pages (CSP) 既是用于构建交互式 CSP 应用程序的架构又是工具集。 CSP 技术允许构建和部署高性能、高度可扩展的 Web 应用程序。 CSP 允许动态生成网页,通常使用来自 Caché 数据库的数据。 “动态Dynamically”意味着每次从最近更改的数据源请求同一页面时,它可能会提供不同的内容。

CSP 用途广泛。它可以

  • 显示每分钟都在变化的库存数据。
  • 支持拥有数千名活跃用户的网络社区。
  • 根据存储在 Caché 数据库中的用户信息个性化页面。
  • 根据不同用户的要求和安全权限,根据用户数据为不同用户定制页面。
  • 提供 HTMLXML、图像或其他二进制或文本数据。
  • 提供快速性能,因为它与高性能 数据库紧密耦合。

CSP 非常适合数据库应用程序。除了提供对内置 Caché 数据库的快速访问之外,它还提供了许多基于 Web 的数据库应用程序必不可少的功能,包括

  • 会话管理
  • 页面认证
  • 能够从网页中执行交互式数据库操作。

CSP 支持两种风格的 Web 开发。

  • 为了使用类开发应用程序,CSP 提供了一个对象框架。
  • 为了使用 HTML 文件开发应用程序,CSP 提供了一种基于 HTML 的标记语言,允许在网页中包含对象和服务器端脚本。可以在一个应用程序中结合这两种技术以获得最大的灵活性。

CSP 和 Zen

Zen 是一个应用程序框架,用于快速创建包含在 CachéEnsemble 中的数据丰富的 Web 应用程序。如果正在构建新的基于 Web 的应用程序或增强现有的基于 CSP 的应用程序,请查看使用 Zen 中的 Zen 框架。

注意:要运行基于 Zen 的应用程序,必须启用“服务文件Serve Files”选项并正确配置 Web 服务器。

在你开始之前

生产 Web 服务器和 Caché 提供的专用 Web 服务器

Caché 提供运行管理门户的最小 Web 服务器,有时称为专用 Web 服务器。专用 Web 服务器还可以显示提供的 CSP 示例并运行 CSP 页面。它无法在生产环境中运行强大的 CSP 应用程序。为此,需要安装一个单独的完整安装的受支持 Web 服务器,例如 Apache Web 服务器、MicrosoftIIS Web 服务器或 Sun Web 服务器。

私有 Web 服务器基于 Apache Web 服务器的最小构建。它被配置为侦听非标准 TCP 端口,默认端口号为 57772(或另一个不是通常的、众所周知的 HTTP 服务器端口 80 的端口)。专用 Web 服务器不会干扰在同一主机上运行的任何其他 Web 服务器安装。

配置 Web 服务器和 CSP 网关

Caché 安装为常见的 Web 服务器和操作系统执行 Web 服务器和 CSP 网关配置。

安装 CachéCSP 网关后,请参阅 CSP 网关配置指南以映射系统的文件扩展名。本书还包含非典型 CSP 网关配置的配置信息。

要在远程服务器(即未运行 Caché 实例的系统)上安装 CSP 网关,可以使用两种方法之一。在远程服务器上,可以运行

  • Caché 安装脚本并选择仅安装 Web 服务器或
  • 独立的 CSPGateway 安装脚本。该脚本询问有关远程 Caché 服务器的信息:名称、地址、端口和可选密码。该脚本会根据此信息自动配置 csp.ini

安装 CSP 网关后,请参阅 CSP 网关配置指南以映射系统的文件扩展名。

注意:为防止运行时错误,对于通过 CSP 运行的高可用性配置, 建议使用启用了粘性会话支持的硬件负载平衡器。

0
0 396
文章 姚 鑫 · 九月 27, 2022 2m read

第四十五章 配置第三方软件以与 InterSystems 产品结合使用

产品通常在与非 工具一起运行的环境中运行,我们的产品与此类工具之间的交互可能会产生有害影响。 关于最佳、可靠部署配置的指导假定我们的产品可以在不受第三方工具干扰的情况下进行部署。例如, 发现用于安全、系统监控或病毒扫描的软件可能会影响我们产品的安装、性能和功能。对于直接与属于 产品的一部分或被 产品使用的文件进行交互的工具(例如病毒扫描程序)尤其如此。

了解客户面临的业务、合规性和其他要求会影响有关在给定环境中运行哪些软件以及如何配置此类软件的决策。一般来说, 建议我们产品的服务器端安装通过物理安全和隔离来保护。这种保护应该减少对其他工具的需求,或者至少减少它们运行的频率。

病毒扫描仪观察:

  1. 为了交付经过病毒检查的软件, 产品在经过消毒的环境中交付给我们的客户,并通过提供校验和进行验证。
  2. 性能影响。

[对策] 出于扫描目的,排除以下文件和目录:

  • WIJ 文件和包含 WIJ 文件的目录*
  • 本指南“配置 IRIS”一章中的所有数据库文件 (.DAT) 和包含数据库文件的目录*(请参阅配置数据库)。
  • 存储或处理日志文件的任何目录*
  • IRIS® 数据平台运行所需的任何其他文件/目录*。例如备用日志目录*(请参阅数据完整性指南中的“日志”),或业务服务或生产使用的任何目录*。
  1. 可执行文件的误报。

[对策] 出于扫描目的,排除所有 irisdb.exe 文件和包含 irisdb.exe 文件的目录。

警告:从恶意软件扫描中排除项目可能会将漏洞引入受保护的设备和应用程序。客户承担配置恶意软件保护的所有责任。

最后,当 发现第三方软件与我们的产品之间的交互对我们的产品行为产生负面影响时,我们会将这些问题报告给第三方供应商。

0
0 103
文章 姚 鑫 · 四月 8, 2021 8m read

第二十章 用户、角色和权限

InterSystems IRIS®具有系统级安全性,以及一组与sql相关的额外安全性特性。 在数据库级保护之外,InterSystems SQL安全性提供了额外级别的安全功能。 SQL和系统级安全性之间的一些关键区别是:

  • SQL保护比系统级保护更细粒度。可以为表、视图和存储过程定义特权。
  • SQL权限既可以授予用户,也可以授予角色。 系统级权限只分配给角色。
  • 持有SQL特权会隐式授予执行SQL操作所需的任何相关系统特权。 (相反,系统级特权并不意味着表级特权。)

InterSystems SQL在InterSystems IRIS数据平台上对ODBC、JDBC、Dynamic SQL和SQL Shell接口进行权限检查。 嵌入式SQL语句不执行特权检查; 假定使用嵌入式SQL的应用程序在使用嵌入式SQL语句之前会检查特权。

SQL权限和系统权限

要通过特定于SQL的机制操作表或其他SQL实体,用户必须具有适当的SQL权限。 系统级权限不足。 用户可以直接被授予SQL权限,也可以属于具有SQL权限的角色。

注意:角色是由SQL和系统级安全共享的:单个角色可以包括系统和SQ权限。

下面的例子,以Windows机器上的InterSystems IRIS为例:

  • 在用户名称空间中有一个名为User.MyPerson的持久化类。 这个类被投影到SQL中作为SQLUser.MyPerson表。
  • 有一个名为Test的用户,他不属于任何角色(因此没有系统权限),并且拥有SQLUser.MyPerson表的所有权限(没有其他SQL权限)。
  • 还有第二个用户,名为test2。此用户被分配给以下角色:%DB_USER(因此可以读取或写入用户数据库上的数据);%SQL(因此可以通过%Service_BINDINGS服务访问SQL);并且通过自定义角色具有使用控制台和%Development的权限。

如果测试用户尝试通过任何特定于SQL的机制(如使用ODBC的机制)在SQLUser.MyPerson表中读取或写入数据,则尝试将成功。这是因为InterSystems IRIS使测试用户成为%SQL角色(包括%SERVICE_SQL:USE权限)和%DB_USER角色的成员,因此该用户具有建立连接所需的权限;这在连接生成的审核事件(如%SYSTEM/%Login/Login event)中可见。(如果测试用户尝试使用终端对象机制,则这些尝试将失败,因为用户对这些机制没有足够的权限。)

如果Test2用户尝试通过任何特定于SQL的机制(如使用ODBC的机制)在SQLUser.MyPerson表中读取或写入数据,则该尝试将失败,因为该用户没有足够的权限访问该表。(如果Test2用户尝试使用对象机制查看终端中的相同数据,则尝试成功-因为该用户有足够的权限进行这种类型的连接。)

用户

InterSystems SQL用户与为InterSystems安全性定义的用户相同。可以使用SQL命令或管理门户定义用户。

  • 在SQL中,可以使用CREATE USER语句创建用户。这只会创建一个用户名和用户密码。新创建的用户没有角色。必须使用GRANT语句为用户分配权限和角色。可以使用ALTER USERDROP USER语句修改现有用户定义。
  • 在管理门户中选择System Administration(系统管理),选择Security(安全性),然后选择Users(用户)。单击页面顶部的Create New User(创建新用户)按钮。这会将带到编辑用户页,可以在其中指定用户名、用户口令和其他参数。创建用户后,其他选项卡即可用,可以在其中指定用户拥有哪些角色、用户拥有哪些常规SQL权限、用户拥有哪些表级权限、哪些视图可用以及可以执行哪些存储过程。

如果用户具有SQL表权限或一般SQL权限,则在用户的角色选项卡上授予或撤消的角色不会影响用户通过基于SQL的服务(如ODBC)对表的访问。这是因为,在基于SQL的服务中,基于表的权限优先于基于资源的权限。

image

可以使用%Library.SQLCatalogPriv类查询列出:

  • 所有用户SQLUsers()
  • 授予指定用户SQLUserPrivs(“username”)的所有权限
  • 授予指定用户SQLUserSysPrivs(“username”)的所有系统权限
  • 授予指定用户SQLUserRole(“username”)的所有角色

以下示例列出了授予当前用户的权限:

/// d ##class(PHA.TEST.SQL).Sqluser2()
ClassMethod Sqluser2()
{
	SET statemt=##class(%SQL.Statement).%New()
	SET cqStatus=statemt.%PrepareClassQuery("%Library.SQLCatalogPriv","SQLUserPrivs")
	IF cqStatus'=1 {WRITE "%PrepareClassQuery failed:" DO $System.Status.DisplayError(cqStatus) QUIT}
	SET rset=statemt.%Execute($USERNAME)
	WRITE "Privileges for ",$USERNAME
	DO rset.%Display()
}

架构形式的用户名

在某些情况下,用户名可以隐式用作SQL模式名称。如果用户名包含SQL标识符中禁止的字符,这可能会带来问题。例如,在多域配置中,用户名包含“@”字符。

根据分隔标识符配置参数的设置,InterSystems IRIS会以不同的方式处理此情况:

  • 如果启用了分隔标识符的使用,则不会进行特殊处理。
  • 如果禁用分隔标识符的使用,则会从用户名中删除所有禁用字符,以形成架构名称。例如,用户名“Documentation@intersystems.com”将成为模式名称“Documentationintersystemscom”

这不会影响SQL CURRENT_USER函数返回的值。它始终与$USERNAME相同。

角色

将SQL权限分配给用户或角色。角色使能够为多个用户设置相同的权限。角色由SQL和系统级安全性共享:单个角色可以同时包括系统权限和SQL权限。

管理门户、系统管理、安全性、角色页提供了InterSystems IRIS实例的角色定义列表。要查看或更改特定角色的详细信息,请选择该角色的名称链接。在出现的编辑角色页面上,有关于角色权限以及哪些用户或角色拥有该权限的信息。

常规选项卡列出角色对系统间安全资源的权限。如果角色仅拥有SQL权限,则一般信息选项卡的资源表会将该角色的权限列为“未定义”。

SQL权限选项卡列出了角色对InterSystems SQL资源的权限,其中命名空间的下拉列表允许查看每个命名空间的资源。因为权限是按名称空间列出的,所以在特定名称空间中没有权限的角色的列表显示为“None”

注:应该使用角色定义权限,并将特定用户与这些角色相关联。这有两个原因:

  1. 与检查单个用户条目相比,SQL引擎通过检查相对较小的角色数据库来确定权限级别的效率要高得多。
  2. 与具有多个单独用户设置的系统相比,使用少量角色集管理系统要容易得多。

例如,可以定义具有特定访问权限的名为“ACCOUNTING”的角色。随着 Accounting Department的发展,可以定义新用户并将其与会计角色相关联。如果需要修改Accounting权限,只需修改一次,系统会自动覆盖Accounting Department的所有成员。

一个角色可以担任其他角色。例如,会计角色可以拥有BILLINGCLERK角色。被授予会计角色的用户将同时拥有会计角色和BILLINGCLERK角色的权限。

还可以使用以下SQL命令定义用户和角色:CREATE USERCREATE ROLEALTER USERGRANTDROP USERDROP ROLE

可以使用%Library.SQLCatalogPriv类查询列出:

  • 所有角色SQLRoles()
  • 授予指定角色SQLRolePrivileges(“Rolename”)的所有权限
  • 授予指定角色SQLRoleUser(“Rolename”)的所有角色或用户
  • 授予指定用户SQLUserRole(“username”)的所有角色

SQL权限

将SQL权限分配给用户或角色。角色使能够为多个用户设置相同的权限。

InterSystems SQL支持两种类型的权限:管理权限和对象权限。

  • 管理权限是特定于命名空间的。

管理权限包括创建、更改和删除对象类型,例如创建表所需的%CREATE_TABLE权限。不仅需要%ALTER_TABLE特权来更改表,还需要%ALTER_TABLE特权来创建或删除索引、创建或删除触发器以及运行TUNE TABLE

管理权限还包括%NOCHECK%NOINDEX%NOLOCK%NOTRIGGER,它们确定用户在执行INSERTUPDATEINSERTUPDATEDELETE时是否可以应用相应的关键字限制。用户需要分配%NOTRIGGER管理权限才能执行TRUNCATE TABLE

  • 对象权限特定于表、视图或存储过程。它们指定对特定命名SQL对象的访问类型(在SQL意义上:表、视图、列或存储过程)。如果用户是SQL对象的所有者(创建者),则会自动向该用户授予该对象的所有权限。

表级对象权限提供对表或视图的所有列中的数据的访问(%ALTERDELETESELECTINSERTUPDATEEXECUTEREFERENCES),包括当前存在的列和任何后续添加的列。

列级对象权限仅提供对表或视图的指定列中的数据的访问权。不需要为具有系统定义的值(如RowIDIdentity)的列分配列级权限。

存储过程对象权限允许将过程的EXECUTE权限分配给指定的用户或角色。

授予SQL权限

可以通过以下方式授予权限:

  • 使用管理门户。从系统管理中选择安全性,然后选择用户或角色。选择所需的用户或角色,然后选择相应的选项卡:管理权限的SQL权限、对象权限的SQL表、SQL视图或SQL过程。
  • 在SQL中,使用GRANT命令向指定用户或角色(或用户或角色列表)授予特定管理权限或对象权限。可以使用REVOKE命令删除权限。
  • 在ObjectScript中,使用$SYSTEM.SQL.Security.GrantPrivileve()方法将特定对象权限授予指定用户(或用户列表)。

列出SQL权限

  • 使用管理门户。从系统管理中选择安全性,然后选择用户或角色。选择所需的用户或角色,然后选择相应的选项卡:管理权限的SQL权限、对象权限的SQL表、SQL视图或SQL过程。
  • 在SQL中,使用%CHECKPRIV命令确定当前用户是否具有特定的管理或对象权限。
  • 在ObjectScript中,使用$SYSTEM.SQL.Security.CheckPrivileve()方法确定指定用户是否具有特定的对象权限。

审核权限错误

当InterSystems IRIS进程调用用户没有特权的SQL语句时,操作将失败,并生成SQLCODE-99错误。启用审核事件%SYSTEM/%SQL/PrivilegeFailure时,将在Audit数据库中为遇到的每个SQLCODE-99错误放置一条记录。默认情况下,此审核数据库选项处于禁用状态。

1
0 442
文章 姚 鑫 · 九月 26, 2022 2m read

[toc]

第四十四章 使用多个 IRIS 实例(四)

配置多个 IRIS 实例

可以在一台机器上安装并同时运行多个 IRIS 实例。像单一安装一样安装 IRIS,为每个实例提供唯一的名称、唯一的安装目录以及用于超级服务器、Web 服务器和 Telnet 的唯一端口号。

多个实例的特殊注意事项是:

  • 安装多个实例受到系统上仅存在一个的组件的限制。例如,通常系统上只有一个 Web 服务器;因此 IRIS 安装将 Web Gateway 配置为最新安装。存储在注册表中的 IRIS 客户端组件遇到了同样的问题。 IRIS 将其 ODBC 驱动程序存储在注册表中,每个驱动程序使用一个名称。目前,最后一次安装会更新这些组件以指向最后安装的实例。

努力将通用组件移动到可以在 IRIS 实例之间共享的通用目录中。

  • 多个实例可以共享同一个多服务器密钥,但如果这样做,它们必须使用同一个许可证服务器或一组许可证服务器。在一个或多个许可证服务器的支持下运行 IRIS 实例的每个系统都必须在每个实例中安装授权许可证密钥文件的本地副本。
  • 多个实例可以联网。
  • 包括对同时使用数据库的保护(即,每个实例必须有自己的数据库,并且不能访问或修改另一个实例的数据库)。
  • 每个实例必须具有唯一的端口号。有关如何设置端口号的信息,请参阅下一节。

设置端口号

对于 IRIS 的标准单一实例,超级服务器端口号默认为 1972。对于一台机器上的多个 IRIS 实例,每个实例都必须有一个唯一的端口号。在安装过程中,如果选择自动设置端口,后续实例将被分配一个端口,或者可以在安装过程中手动输入端口号。标准安装为的 IRIS 实例设置以下端口号,如下所示:

  • 超级服务器端口号 — 1972(如果可用)。否则,端口设置为 51773 或第一个可用的后续编号。
  • Web 服务器端口号 — 52773 或第一个可用的后续编号。
  • Telnet 端口号 — 23

由于 IRIS 安装分配它们的方式,很可能不需要更改超级服务器或 Web 服务器端口号。但是,确实需要为每个实例分配一个唯一的 Telnet 端口号。可以在管理门户的内存和启动页面(系统管理 > 配置 > 系统配置 > 内存和启动)中更改安装后的超级服务器端口值,可以在安装后从启动设置中更改 Web 服务器和 Telnet 端口值管理门户的页面(系统管理 > 配置 > 其他设置 > 启动)和 Telnet 设置页面(系统管理 > 配置 > 设备设置 > Telnet 设置)。

0
0 115
文章 姚 鑫 · 九月 25, 2022 8m read

第四十三章 使用多个 IRIS 实例(三)

Windows 上的 iris 命令

Windows 上,必须从 install-dir\bin 目录运行 iris 命令(或在命令中包含完整路径)。

  • iris all 列出所有已安装实例的摘要信息,每行一个实例,如下所述。

注意:如果需要完整的信息,例如用于解析或报告目的,请使用 iris list

C:\InterSystems\IRISHealth\bin>iris all
    Instance          Version ID        Port   Directory
    -------------     ----------        ----   ---------
up  irishealth        2022.1.0.114.0    51773  c:\intersystems\irishealth
  • iris allw 为每个实例列出与 iris all 相同的信息,而不包含长字段值。可能会产生超过 80 个字符的行。
C:\InterSystems\IRISHealth\bin>iris allw
    Instance Name                   Version ID                   Port   Directory
    ------------------------------- ---------------------------- -----  --------------------------------
up  irishealth                      2022.1.0.114.0               51773  c:\intersystems\irishealth
  • iris console instname [arguments] 在操作系统命令窗口而不是终端窗口中打开 Terminal

image

  • iris force instname 强制关闭实例。
  • iris help 显示有关 iris 命令的最新信息。
C:\InterSystems\IRISHealth\bin>iris help
usage:
       iris start <instance> [<cpf_file>]
           to start instance <instance>, optionally using the specified .cpf file.

           An optional /EmergencyId=Username,Password can be used to start
           InterSystems IRIS in emergency mode.  When the EmergencyId argument
           is supplied, the system starts up in emergency mode in which only the
           baseline databases are mounted and access to InterSystems IRIS is
           governed by InterSystems IRIS login using that username and password.
           Emergency mode is supplied to give access in the event that privileged
           users are not available or their password is forgotten.  Emergency
           startup is only available from an administrator account.

           When InterSystems IRIS is started in emergency mode, the IRIS control
           service is not used. This means that if you log out of Windows, all
           the InterSystems IRIS processes will immediately exit.

   or: iris startnostu <instance>
           to start instance <instance> without running ^STU.

   or: iris stop <instance>
           to shut down instance <instance>.

   or: iris stopnoshut <instance>
           to shut down instance <instance> without running user shutdown routines.

   or: iris stopstart <instance>
           to shut down and restart instance <instance>.

Note:  An optional /nofailover argument can be specified for stop,
       stopnoshut, or stopstart to not trigger a mirror failover.

   or: iris force <instance>
           to force down instance <instance>.

   or: iris [ run OR console OR terminal ] <instance>
           to run InterSystems IRIS in programmer mode with
           [ no-device OR console OR terminal ] for $Principal.

   or: iris [ run OR console OR terminal ] <instance> <Rou>
           to run InterSystems IRIS routine <Rou> in application mode with
           [ no-device OR console OR terminal ] for $Principal.

   or: iris [ run OR console OR terminal ] <instance> <Rou> <namespace>
           to run InterSystems IRIS routine <Rou> in <namespace> in application
           mode with [ no-device OR console OR terminal ] for $Principal.

   or: iris runw <instance> <Rou> [<namespace>]
           to run InterSystems IRIS routine <Rou> in application mode with
           no input/output device for $Principal using the optional namespace.
       When run from a batch script, iris will wait for the InterSystems IRIS
       process to terminate before returning. The exit code from the InterSystems
       IRIS process will be returned by iris.

Note:  An optional /Title="Title string" can specify the console
       or terminal title bar text.

   or: iris iristraystart <instance>
           to start IRISTray for instance <instance>.

   or: iris iristraystop <instance>
           to stop IRISTray for instance <instance>.

   or: iris licmanagerstop <instance>
           to stop licmanager running in instance <instance>.

   or: iris all [> outputfile]
           to list all installed instances.

   or: iris allw [> outputfile]
           to list (wide format) all installed instances.

   or: iris list [<instance>] [> outputfile]
           to list information about all installed instances or the
           specified instance.

   or: iris qlist [<instance>] [> outputfile]
           to display a quick list of information about all installed
           instances or the specified instance, in a format suitable
           for parsing in command scripts.
   The record for an instance contains fields separated by "^" (carats):
           Field 1: instance name
           Field 2: instance directory
           Field 3: version identifier
           Field 4: current status for the instance
           Field 5: configuration file name last used
           Field 6: SuperServer port number
           Field 7: WebServer port number
           Field 8: JDBC Gateway port number
           Field 9: Instance status (e.g., ok, warn, alert)
           Field 10: Product name of the instance
           Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery)
           Field 12: Mirror Status (e.g., Primary, Backup, Connected)

   or: iris serverlist [> outputfile]
           to list information about all defined servers.

Note:  When  [> outputfile] is present, output is redirected
       to the file instead of being displayed on the terminal.

   or: iris telnetstop <instance>
           to stop the InterSystems IRIS TELNET daemon.

   or: iris telnettrace <instance>
           to toggle the TELNET trace state.

   or: iris iristrmdstop <instance>
           to stop the InterSystems IRIS terminal daemon.

Note:  iris often displays error information in a message box.
       You can suppress the message box containing error information
       by adding "quietly" (without the quotation marks) as the
       final argument to the iris command.

   or: iris help [display]
           to show this help. If display is specified the help
           is displayed in a browser window.

  • iris list [arguments] 显示有关已安装 IRIS 实例的信息,如下所述。
C:\InterSystems\IRISHealth\bin>iris list irishealth
Instance 'irishealth'   (Custom installation)
        directory: 'C:\InterSystems\IRISHealth'
        versionid: '2022.1.0.114.0'
        conf file: 'c:\intersystems\irishealth\iris.cpf'  (SuperServer port = 51773, WebServer port = 52773)
        status   : 'running, since Mon Sep 12 08:08:58 2022'
        Product  : InterSystems IRISHealth

instname — 可以选择指定 IRIS 实例名称以仅显示有关该实例的信息。例如,iris list MyIRIS 仅显示有关 MyIRIS 实例的信息。

  • iris qlist [参数]iris list 类似,但有附加信息。每个实例的输出(如下所述)在一行中给出,字段由插入符号 (^) 分隔。

instname — 可以选择指定 IRIS 实例名称以仅显示有关该实例的信息。例如,iris qlist MyIRIS 仅显示有关 MyIRIS 实例的信息。

C:\InterSystems\IRISHealth\bin>iris qlist irishealth
irishealth^C:\InterSystems\IRISHealth^2022.1.0.114.0^running, since Mon Sep 12 08:08:58 2022^c:\intersystems\irishealth\iris.cpf^51773^52773^^^IRISHealth^^
  • iris run instname [arguments] 在没有 $Principal 的输入/输出设备的程序员模式下运行 IRIS。
  • iris runw instname 例程 [参数] 在应用程序模式下运行命名的 IRIS 例程,没有 $Principal 的输入/输出设备。从批处理脚本运行时,该命令会等待 IRIS 进程终止,然后再从进程返回退出代码。

namespace — 在指定的命名空间中运行例程。

注意:如果使用指定了启动命名空间的用户帐户启动 IRIS,则命名空间参数无效(请参阅用户帐户属性)。

  • iris start instname [参数] 启动实例。

注意:系统可能会提示以“紧急模式”启动。

完整的 CPF 路径 — 默认情况下, IRIS 从位于 &lt;install-dir&gt;/mgr 目录中的 iris.cpf 文件中读取某些设置。可以提供另一个 .cpf 文件的完整路径以供使用。

  • iris startnostu instname 启动指定的实例而不运行^STU
  • iris stop instname [参数] 关闭实例。

/nofailover — 指定此可选参数以防止触发镜像故障转移。

  • iris stopnoshut instname [参数] 使用 INTNOSHUT^SHUTDOWN 关闭命名实例。

注意:只有实例所有者和 irisusr 可以在不登录终端的情况下运行 INTNOSHUT^SHUTDOWN

/nofailover — 指定此可选参数以防止触发镜像故障转移。

  • iris stopstart instname [参数] 关闭实例后启动它。

/nofailover — 指定此可选参数以防止触发镜像故障转移。

  • iris terminal instname [参数] 打开实例的 Terminal

routine — 在终端中以应用程序模式为 $Principal 运行命名的 IRIS 例程。 "[label[+offset]]^routine" — 指定要在用户模式下运行的 ObjectScript 程序的名称。除了指定的格式之外,还可以传递由字符串和/或数字文字组成的参数列表,以及省略的 (void) 参数,如下所示:

  • "routine[([parameter-list])]"
  • "[label]^routine[([parameter-list])]"
  • "##CLASS(package.class).method[([parameter-list])]"

其中,例如,参数列表以“string literal”的形式指定,-+-000123.45600E+07,省略的参数作为 $Data(parameter)=0 传递给目标。

注意:空格和 shell 元字符必须以依赖于操作系统的形式引用。

命名空间 — 与例程一起使用,在指定的命名空间中运行例程。

注意:如果您用指定了启动命名空间的用户帐户启动 IRIS,则命名空间无效(请参阅用户帐户属性)。

iris list, qlist, and all

iris all

列出有关一个或多个 IRIS 实例的以下信息:

  • 实例状态,如下
    • <blank>(状态不可用,登录已禁用)
    • dn(关闭或已崩溃)
    • up (running)
    • st (starting or stopping)
  • 实例名称
  • IRIS 版本
  • 超级服务器端口号
  • 安装目录

iris list

列出有关一个或多个 IRIS 实例的以下信息:

  • 实例名称(和安装类型)
  • 安装目录
  • IRIS 版本
  • IRIS 参数 (.cpf) 文件的路径名
  • 超级服务器和网络服务器端口号
  • 实例状态,如下
    • running
    • down
    • starting or stopping
    • 不完整的启动或停止,登录被禁用
  • 实例的系统健康状态,如果正在运行(不包括在 Windows 中)
  • 镜像成员类型和状态(如果是镜像成员)

iris qlist

为一个或多个 IRIS 实例在单行上输出以下信息,以插入符号 (^) 分隔:

  1. 实例名称(和安装类型)
  2. 安装目录
  3. IRIS版本
  4. 实例状态
  5. 当前配置参数文件的路径名,相对于安装目录。 Windows 系统改为显示完整路径。
  6. 超级服务器端口号
  7. 网络服务器端口号
  8. JDBC 网关端口号
  9. 实例的系统健康状态,如果正在运行(在 Windows 上总是空白)
  10. 产品名称
  11. 镜像成员类型(如果是镜像成员)
  12. 镜像状态(如果是镜像成员)
  13. 数据目录(如果适用)
0
0 130
文章 姚 鑫 · 九月 24, 2022 14m read

第四十二章 使用多个 IRIS 实例(二)

控制 IRIS 实例

iris 命令支持终端以外的许多功能,并以 iris function instname arguments 格式调用,其中 instname 是在安装期间选择的实例名称,参数取决于函数。

重要提示: iris help 命令显示所有命令函数和参数; IRISHelp.html 文件位于 install-dir\Help 目录中。 iris 命令的某些功能在本文档中没有列出,但在帮助显示中显示。

C:\InterSystems\IRISHealth\bin>iris help
usage:
       iris start <instance> [<cpf_file>]
           to start instance <instance>, optionally using the specified .cpf file.

           An optional /EmergencyId=Username,Password can be used to start
           InterSystems IRIS in emergency mode.  When the EmergencyId argument
           is supplied, the system starts up in emergency mode in which only the
           baseline databases are mounted and access to InterSystems IRIS is
           governed by InterSystems IRIS login using that username and password.
           Emergency mode is supplied to give access in the event that privileged
           users are not available or their password is forgotten.  Emergency
           startup is only available from an administrator account.

           When InterSystems IRIS is started in emergency mode, the IRIS control
           service is not used. This means that if you log out of Windows, all
           the InterSystems IRIS processes will immediately exit.

   or: iris startnostu <instance>
           to start instance <instance> without running ^STU.

   or: iris stop <instance>
           to shut down instance <instance>.

   or: iris stopnoshut <instance>
           to shut down instance <instance> without running user shutdown routines.

   or: iris stopstart <instance>
           to shut down and restart instance <instance>.

Note:  An optional /nofailover argument can be specified for stop,
       stopnoshut, or stopstart to not trigger a mirror failover.

   or: iris force <instance>
           to force down instance <instance>.

   or: iris [ run OR console OR terminal ] <instance>
           to run InterSystems IRIS in programmer mode with
           [ no-device OR console OR terminal ] for $Principal.

   or: iris [ run OR console OR terminal ] <instance> <Rou>
           to run InterSystems IRIS routine <Rou> in application mode with
           [ no-device OR console OR terminal ] for $Principal.

   or: iris [ run OR console OR terminal ] <instance> <Rou> <namespace>
           to run InterSystems IRIS routine <Rou> in <namespace> in application
           mode with [ no-device OR console OR terminal ] for $Principal.

   or: iris runw <instance> <Rou> [<namespace>]
           to run InterSystems IRIS routine <Rou> in application mode with
           no input/output device for $Principal using the optional namespace.
       When run from a batch script, iris will wait for the InterSystems IRIS
       process to terminate before returning. The exit code from the InterSystems
       IRIS process will be returned by iris.

Note:  An optional /Title="Title string" can specify the console
       or terminal title bar text.

   or: iris iristraystart <instance>
           to start IRISTray for instance <instance>.

   or: iris iristraystop <instance>
           to stop IRISTray for instance <instance>.

   or: iris licmanagerstop <instance>
           to stop licmanager running in instance <instance>.

   or: iris all [> outputfile]
           to list all installed instances.

   or: iris allw [> outputfile]
           to list (wide format) all installed instances.

   or: iris list [<instance>] [> outputfile]
           to list information about all installed instances or the
           specified instance.

   or: iris qlist [<instance>] [> outputfile]
           to display a quick list of information about all installed
           instances or the specified instance, in a format suitable
           for parsing in command scripts.
   The record for an instance contains fields separated by "^" (carats):
           Field 1: instance name
           Field 2: instance directory
           Field 3: version identifier
           Field 4: current status for the instance
           Field 5: configuration file name last used
           Field 6: SuperServer port number
           Field 7: WebServer port number
           Field 8: JDBC Gateway port number
           Field 9: Instance status (e.g., ok, warn, alert)
           Field 10: Product name of the instance
           Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery)
           Field 12: Mirror Status (e.g., Primary, Backup, Connected)

   or: iris serverlist [> outputfile]
           to list information about all defined servers.

Note:  When  [> outputfile] is present, output is redirected
       to the file instead of being displayed on the terminal.

   or: iris telnetstop <instance>
           to stop the InterSystems IRIS TELNET daemon.

   or: iris telnettrace <instance>
           to toggle the TELNET trace state.

   or: iris iristrmdstop <instance>
           to stop the InterSystems IRIS terminal daemon.

Note:  iris often displays error information in a message box.
       You can suppress the message box containing error information
       by adding "quietly" (without the quotation marks) as the
       final argument to the iris command.

   or: iris help [display]
           to show this help. If display is specified the help
           is displayed in a browser window.

IRISHelp.html

IRIS.EXE USAGE:

 

            iris start <instance name> [<full path and file name of .cpf file>]

                        Starts InterSystems IRIS instance <instance name>, optionally using the specified .cpf file.

 

            Note:   An optional /EmergencyId=Username,Password can be used

                        to start InterSystems IRIS in emergency mode.  When the EmergencyId

argument is supplied, the system starts up in emergency mode in which

only the baseline databases are mounted and access to InterSystems IRIS is governed

by InterSystems IRIS login using that username and password.  Emergency mode is supplied

to give access in the event that privileged users are not available or their password

is forgotten.  Emergency startup is only available from an administrator account.


When InterSystems IRIS is started in emergency mode, the IRIS control service is not used.  

This means that if you log out of Windows, all the InterSystems IRIS processes will immediately exit.

 

            iris startnostu <instance name>

                        Starts instance <instance name> without running ^STU.

                         

            iris stop <instance name>

                        Shuts down instance <instance name>.

                         

            iris stopnoshut <instance name>.

            Shuts down instance <instance name> without running user shutdown routines.

                         

            iris stopstart <instance name>

                        Shuts down and restarts instance <instance name>.

                         

            Note:  An optional /nofailover argument can be specified for stop, stopnoshut,

                        or stopstart.  Specifying this option prevents triggering a mirror failover.

 

            iris force <instance name>

                        Forces down instance <instance name>.

                         

            iris [ run OR console OR terminal ] <instance name>

                        Runs InterSystems IRIS in programmer mode with

                        [ no-device OR console OR terminal ] for $Principal.

 

            iris [ run OR console OR terminal ] <instance name> <Rou>

                        Runs InterSystems IRIS routine <Rou> in application mode with

                        [ no-device OR console OR terminal ] for $Principal.

             

            iris [ run OR console OR terminal ] <instance name> <Rou> <namespace>

                        Runs InterSystems IRIS routine <Rou> in <namespace> in application mode with

                        [ no-device OR console OR terminal ] for $Principal.

 

      iris runw <instance> <Rou> [<namespace>]

                        Runs InterSystems IRIS routine <Rou> in application mode with

                        no input/output device for $Principal using the optional namespace.

                        When run from a batch script, iris will wait for the InterSystems IRIS process to

                        terminate before returning.  The exit code from the InterSystems IRIS process will be

                        returned by iris.

 

            Note:  An optional /Title=”Title string” can specify the console

                        or terminal title bar text.

 

            Examples:

 

                        Run ^%SS in a console in the i181u instance:

 

                        iris console i181u ^^%SS

 

                        Run ^%SS in an InterSystems IRIS terminal in the i181u instance:

 

iris terminal i181u ^^%SS

 

Start ^%SS running in an InterSystems IRIS terminal in the i181u instance from a batch file (extra % required):

 

iris terminal i181u ^^%%SS

 

Run sub^test(“hello”) in an InterSystems IRIS terminal in the USER namespace of the IRIS instance i181u:

 

iris terminal i181u sub^^test(\"hello\")  USER

 

Note:  The namespace parameter only works if the login record for the user does not specify a namespace. If the user security record specifies a namespace, then it will override the namespace parameter.

             

            iris iristraystart <instance name>

                       Starts IRISTray for instance <instance name>.

 

            iris iristraystop <instance name>

                        Stops IRISTray for instance <instance name>.

             

            iris licmanagerstop <instance name>

                        Stops the licmanager process running in instance <instance name>.

           

            iris all [> outputfile]

                        Lists all installed instances.

 

The status for each instance is indicated by:

                "dn" - InterSystems IRIS instance is not running

                "st" -  InterSystems IRIS instance is starting or stopping.

                "up" - InterSystems IRIS instance is running on this machine

                "  " - (blank) status unavailable.  Instance is probably partly up without ^STU completing.  Logins are disabled.

 

            iris allw [> outputfile]

                        Lists all installed instances in wide format.

 

            iris list [<instance>] [> outputfile]

                        Lists brief information about all installed instances, or the specified instance.

 

The status for each instance is indicated by:

                "down" - InterSystems IRIS instance is not running

                "starting or stopping" -  InterSystems IRIS instance is starting or stopping.

                "running" - InterSystems IRIS instance is running on this machine

                "Incomplete start or stop, logins disabled"  " - Instance is probably partly up without ^STU completing.  Logins are disabled.

 

            iris qlist [<instance>] [> outputfile]

                        Display a quick list of information about all installed instances, or the specified instance, in a format suitable for parsing in command scripts.

                        The record for an instance contains fields separated by "^" (carats):

                               Field 1: instance name

                               Field 2: instance directory

                               Field 3: version identifier

                               Field 4: current status for the instance

                               Field 5: configuration file name last used

                               Field 6: SuperServer port number

                               Field 7: WebServer port number

                               Field 8: JDBC Gateway port number

                               Field 9: Instance status (e.g., ok, warn, alert)

                               Field 10: Product name of the instance

                               Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery)

                               Field 12: Mirror Status (e.g., Primary, Backup, Connected)

 

            iris serverlist [> outputfile]

                        Lists information about all defined servers.

 

            Note:   When [> outputfile] is present, output is redirected to the file

                        instead of being displayed on the terminal.

 

iris telnetstop <instance name>

                        Stops the InterSystems IRIS TELNET daemon.

 

iris iristrmdstop <instance name>

                        Stops the InterSystems IRIS terminal daemon.

 

            iris help [display]

                        Writes the help text to the terminal or, if display is specified,

                        displays the help in a browser window.

 

            Error reporting:

 

            Return value:  If the control command succeeds, it returns 0.  Otherwise it usually returns 1 or some other

non-zero value to indicate an error.  You can check the return value by inspecting the ErrorLevel environment

variable.

 

Message box:  iris often displays error information in a message box.

You can suppress the message box containing error information by adding “quietly”

(without the quotation marks) as the final argument to the iris command.

This may be useful when running an unattended .bat script.  For example:

 

        iris stop xxxx quietly
        if not errorlevel 0 …
 
 

 

iris 命令的行为因平台而异,如下表所述:

Unix®LinuxmacOS 上的 iris 命令

注意: iris 命令通常会在消息框中显示错误信息。可以通过安静地添加作为 iris 命令的最后一个参数来抑制此消息框,该命令以非交互方式运行该命令,并带有最少的对话框。此参数对其他命令也很有用,例如当想要关闭实例而无需确认命令时。

  • iris all 列出所有已安装实例的摘要信息,每行一个实例,如下所述。
C:\InterSystems\IRISHealth\bin>iris all
    Instance          Version ID        Port   Directory
    -------------     ----------        ----   ---------
up  irishealth        2022.1.0.114.0    51773  c:\intersystems\irishealth

注意:如果需要完整的信息,例如用于解析或报告目的,请使用 iris list

C:\InterSystems\IRISHealth\bin>iris list
Instance 'IRISHealth'   (Custom installation)
        directory: 'C:\InterSystems\IRISHealth'
        versionid: '2022.1.0.114.0'
        conf file: 'c:\intersystems\irishealth\iris.cpf'  (SuperServer port = 51773, WebServer port = 52773)
        status   : 'running, since Sun Sep  4 16:16:54 2022'
        Product  : InterSystems IRISHealth

  • iris allw 为每个实例列出与 iris all 相同的信息,而不包含长字段值。可能会产生超过 80 个字符的行。
C:\InterSystems\IRISHealth\bin>iris allw
    Instance Name                   Version ID                   Port   Directory
    ------------------------------- ---------------------------- -----  --------------------------------
up  irishealth                      2022.1.0.114.0               51773  c:\intersystems\irishealth
  • iris console instname [arguments] 在操作系统命令窗口而不是Terminal 窗口中打开 Terminal 。同 iris terminal

image

  • iris force instname 强制关闭实例。
C:\InterSystems\IRISHealth\bin>iris force irishealth
  • iris help [参数] 显示有关 iris 命令的最新信息。start, stop, force — 显示启动、停止和强制功能的特定功能帮助。
C:\InterSystems\IRISHealth\bin>iris help force
C:\InterSystems\IRISHealth\bin>iris help start
C:\InterSystems\IRISHealth\bin>iris help stop
  • iris list [arguments] 显示有关已安装 IRIS 实例的信息,如下所述。

instname — 可以选择指定 IRIS 实例名称以仅显示有关该实例的信息。例如,iris list MyIRIS 仅显示有关 MyIRIS 实例的信息。

C:\InterSystems\IRISHealth\bin>iris list irishealth
Instance 'irishealth'   (Custom installation)
        directory: 'C:\InterSystems\IRISHealth'
        versionid: '2022.1.0.114.0'
        conf file: 'c:\intersystems\irishealth\iris.cpf'  (SuperServer port = 51773, WebServer port = 52773)
        status   : 'running, since Sun Sep  4 16:16:54 2022'
        Product  : InterSystems IRISHealth

  • iris merge instname [arguments] 将配置合并文件应用于实例,更新其 CPF(请参阅使用配置合并自动配置 IRIS)。

merge-file [existing-CPF] — 可以指定要应用的合并文件的位置,可以选择后跟目标 CPF 的位置。例如,iris merge MyIRIS /tmp/merge.cpf 将合并文件 /tmp/merge.cpf 应用于名为 MyIRIS 的实例。如果不带参数调用,则使用以下默认值:

  • 对于合并文件,默认值是 ISC_CPF_MERGE_FILE 环境变量的值。

  • 对于现有的 CPF,默认是位于以下位置的 iris.cpf 文件:

    • 对于已安装的实例,安装目录。
    • 对于容器,由 ISC_DATA_DIRECTORY 环境变量指定的目录;如果未使用持久 %SYSISC_DATA_DIRECTORY,则使用 ISC_PACKAGE_INSTALLDIR 环境变量指定的目录。
  • iris qall 为每个实例列出与 iris all 相同的信息,除了长行被截断为 78 个字符外加一个终止波浪号 (~)。

C:\InterSystems\IRISHealth\bin>iris qall
  • iris qlist [参数] 与 iris list 类似,但有附加信息。每个实例的输出(如下所述)在一行中给出,字段由插入符号 (^) 分隔。

instname — 可以选择指定 IRIS 实例名称以仅显示有关该实例的信息。例如,iris qlist MyIRIS 仅显示有关 MyIRIS 实例的信息。

C:\InterSystems\IRISHealth\bin>iris qlist irishealth
irishealth^C:\InterSystems\IRISHealth^2022.1.0.114.0^running, since Sun Sep  4 16:16:54 2022^c:\intersystems\irishealth\iris.cpf^51773^52773^^^IRISHealth^^

  • iris rename instname newname 重命名实例。
  • iris restart instname [参数] 重启实例;相当于 iris stop instname restart

nofailover — 指定此可选参数以防止触发镜像故障转移。

  • iris start instname [参数] 启动实例。

注意:系统可能会提示以“紧急模式”启动;如果是这样,请参阅紧急访问了解更多信息。

完整的CPF 路径 — 默认情况下, IRIS 从位于 <install-dir>/mgr 目录中的 iris.cpf 文件中读取某些设置。可以提供另一个 .cpf 文件的完整路径以供使用。 nostu — 启动指定的实例而不运行 ^STU

  • iris stat instname 检索与 irisstat 实用程序相同的系统统计信息。
  • iris stop instname [参数] 关闭实例。

restart — 关闭实例后启动实例。 nofailover — 指定此可选参数以防止触发镜像故障转移。

  • iris stopnoshut instname [参数] 使用 INTNOSHUT^SHUTDOWN 关闭命名实例。

注意:只有实例所有者和 irisusr 可以在不登录终端的情况下运行 INTNOSHUT^SHUTDOWN

nofailover — 指定此可选参数以防止触发镜像故障转移。

  • iris terminal instname [参数] 打开实例的 Terminal

B — 允许系统管理员紧急登录终端。 -b partition_size — 指定进程的最大分区大小(以 KB 为单位)。 "[label[+offset]]^routine" — 指定要在用户模式下运行的 ObjectScript 程序的名称。除了指定的格式之外,还可以传递由字符串和/或数字文字组成的参数列表,以及省略的 (void) 参数,如下所示:

  • "routine[([parameter-list])]"

  • "[label]^routine[([parameter-list])]"

  • "##CLASS(package.class).method[([parameter-list])]"

    其中,例如,参数列表以“字符串文字”的形式指定,-+-000123.45600E+07,省略的参数作为 $Data(parameter)=0 传递给目标。

    注意:空格和 shell 元字符必须以依赖于操作系统的形式引用。

U 命名空间 — 指定终端登录命名空间。

注意:如果使用指定了启动命名空间的用户帐户启动 IRIS,则 -U 参数无效(请参阅用户帐户属性)。

0
0 218
文章 姚 鑫 · 九月 23, 2022 2m read

第四十一章 使用多个 IRIS 实例(一)

可以在单个主机系统上安装和运行多个 IRIS® 数据平台实例。每个实例都是一个独特的、独立的 IRIS 环境。

管理 IRIS 实例

有许多方法可以连接和管理 IRIS 实例,它可能是安装在给定系统上的几种方法之一。两种最常用的方法如下:

  • 安装在 Windows 系统上的每个 IRIS 实例在系统托盘中都有自己的启动器,除其他选项外,还可以:

    • 通过打开管理门户、 TerminalStudio 开发者客户端连接到实例。
    • 启动、停止和重新启动实例。
    • 打开用户和开发人员文档。

    从启动器中,还可以管理多个远程 IRIS 实例,包括但不限于运行远程备份、编辑配置设置以及创建和编译远程对象和例程。

  • iris command 在操作系统命令行上执行 iris 命令可让管理访问 IRIS 实例,其中包括其他选项,可以:

    • 使用 Terminal连接到实例。
    • 启动、停止和重新启动实例。
    • 显示有关该实例以及系统上安装的其他实例的信息。

    要在远程服务器上使用 iris 命令,请使用 TelnetSSH 客户端;要将它与容器化实例一起使用,请在容器内使用它,或者使用 docker exec 命令从容器外部运行它。

连接到 IRIS 实例

Terminal 是一个命令行,可以在 IRIS 实例的任何命名空间中使用。使用命令 iris terminal instname 打开正在运行的实例的终端,其中 instname 是在安装时为实例指定的名称。容器化实例通常被命名为 IRIS

使用在安装期间提供的密码或创建的帐户使用预定义的用户帐户之一登录。显示的提示指示登录命名空间,例如:

# iris terminal IRISHealth

Node: intersystems2588, Instance: IRIS27

Username: admin
Password: ********
USER>

要退出终端并关闭窗口,请输入命令 halt

当使用docker exec 命令打开容器化实例的终端时(如在部署和探索 IRIS 中使用 终端进行交互中所述),将自动以 irisowner 身份登录,无需进行身份验证。

Windows 系统上,必须从其位置( IRIS 实例的 install-dir\bin 目录)执行命令,或在命令中包含完整路径,例如 c:\InterSystems\IRIS27\bin\iris terminal IRISHealth .可以执行给定实例的二进制文件以连接到该实例或另一个;无论哪种方式,实例名称都是必需的。

0
0 167
文章 体进 邓 · 九月 23, 2022 1m read

1、使用HTTPS前,需要在系统 > 安全管理 > SSL/TLS 配置 添加客户端的凭据

2、代码

0
0 183
文章 姚 鑫 · 九月 22, 2022 2m read

第四十章 连接到远程服务器(二)

使用可选的服务器字段

网络服务器 IP 地址 Web Server IP Address

如果计划使用与正在管理的 IRIS 实例不同的机器上存在的 Web 服务器,请在此字段中输入 Web 服务器机器的 IP 地址。如果未指定,则默认为 IP 地址。

CSP Server Instance

如果正在配置一个 Web 服务器以连接到多个 IRIS 实例,请在 CSP 服务器实例字段中输入要连接的 IRIS 实例名称。

例如,如果在 Windows 机器上安装了 IIS Web 服务器,并且还安装了 IRIS 的两个实例,iris1iris2,则默认情况下,使用作为 IRIS 一部分安装的自己的私有 Apache Web 服务器管理每个实例.

但是,也可以通过更改 Web 服务器端口(IIS 默认为 80)并在为每个实例创建服务器定义时在 CSP 服务器实例字段中指定 iris1iris2 来从公共 IIS Web 服务器管理这两个实例。这会在公共 Web 服务器上自动创建虚拟目录 /iris1/iris2,它们指向相应的 IRIS 实例。

当在 CSP 服务器实例字段中输入一个值并在此服务器的启动器上选择管理门户时,URI 形成如下:

http://<web srvr addr>:<web srvr port>/<csp srvr inst>/csp/sys/UtilHome.csp

这会将实例名称放在 URI 的“/csp/sys/UtilHome.csp”部分之前,并为示例中的两个实例生成以下 URI。

http://localhost:80/iris1/csp/sys/UtilHome.csp
http://localhost:80/iris2/csp/sys/UtilHome.csp

如果计划远程使用 IRIS 开发工具和 CSP 应用程序或从一台 Web 服务器控制多个实例,请执行高级 Web 服务器配置部分中描述的高级配置步骤。

高级 Web 服务器配置

要使某些 IRIS 功能在远程连接上正常运行,必须在远程实例上配置一些额外的 Web 服务器设置。

Web 服务器机器,将管理门户指向远程 IRIS 服务器实例,并从门户的启动设置页面配置以下设置(系统管理 > 配置 > 附加设置 > 启动):

  • WebServerName — 配置为与 IRIS 工具一起使用的 Web 服务器的 DNS 名称或 IP 地址(相当于 Web 服务器 IP 地址设置)。
  • WebServerPortWeb 服务器的端口号(相当于 Web 服务器端口设置)。
  • WebServerURLPrefixIRIS 服务器实例的名称(相当于 CSP 服务器实例设置)。

image

0
0 136
文章 姚 鑫 · 九月 21, 2022 3m read

第三十九章 连接到远程服务器(一)

可以从 Telnet 会话、WindowsIRIS® 启动器上的远程系统访问子菜单或从 Web 服务器和实例信息生成的 URI 控制远程实例。

要为远程实例使用远程系统访问子菜单上的实用程序:

  1. 定义远程服务器连接以将服务器添加到首选服务器列表。
  2. 单击 IRIS 启动器并指向远程系统访问。
  3. 指向启动器实用程序,然后单击服务器名称。

还可以从 Telnet 会话连接到 IRIS 的远程实例:

  1. 单击 IRIS 启动器并指向远程系统访问。

  2. 单击 IRIS Telnet,连接到远程服务器,并使用用户名和密码登录 IRIS 系统。或者,如果服务器在首选服务器列表中,请指向终端,然后单击服务器名称。

可以从 PC 上运行的终端或任何能够运行 Telnet 的工作站客户端远程登录到任何受支持平台上的 IRIS 实例。此客户端可能只有实用程序,而没有 IRIS 服务器实例。大多数情况下,客户端计算机上的 IRIS 版本必须与其管理的 IRIS 系统的版本相同或更高。

注意:在 macOS 平台上,还可以从 Windows 上的命令提示符使用 SSH 连接到 macOS 机器,然后使用以下命令进行连接:

sudo /sbin/service telnet start

还可以将 Web 服务器页面与远程 Web 服务器一起使用。这可用于使用管理门户管理 IRIS 实例。

当连接到远程系统访问菜单上的管理门户或文档选项时,只要远程实例正在运行,就可以为生成的 URI 添加书签并返回到 Web 服务器上的这些页面。

重要提示:如果使用 Internet Explorer Web 浏览器,可能需要调整本地 Intranet 安全设置以正确连接到远程服务器。

定义远程服务器连接

要在远程服务器上使用 IRIS 启动器实用程序或其他 IRIS 应用程序,该服务器必须位于 IRIS 服务器管理器的连接列表中。这是之前定义的可以快速连接的远程服务器的列表。远程服务器由唯一服务器的 IP 地址和 TCP 端口定义,该端口是该服务器上的 IRIS 实例。

重要提示:IRIS 超级服务器必须在远程机器上运行,并且它的端口必须在防火墙上打开,才能在该系统上使用 IRIS 启动器实用程序。出于安全原因,用户名和密码不与远程连接信息一起存储。

定义远程服务器:

  1. IRIS 启动器菜单中,指向首选服务器,然后单击添加/编辑以打开 IRIS 服务器管理器。 (在 Windows 系统上,必须具有管理员权限才能执行此步骤。)

  2. 单击添加以打开添加连接对话框。

  3. 按照下表中的说明填写字段,然后单击“确定”。除非另有说明,否则每个字段都是必需的。

添加连接输入字段

输入字段描述
Server Name标识服务器的描述性短语;它是 IRIS 启动器中的一个选项。
IP Address远程服务器的 IP 地址、主机名(如果有 DNS 服务器)或完全限定域名 (FQDN)。 IRIS 接受远程服务器的任何合法名称引用。
Port超级服务器的端口号。默认端口号为 1972
Telnet Porttelnet 连接的端口号。默认端口号为 23
Web Server IP Address可选 – 用于管理此 IRIS 实例的 Web 服务器的 IP 地址。如果未指定,则默认为 IP 地址。
Web Server PortWeb 服务器的端口号。默认端口号为 52773
CSP Server Instance可选 – 如果将一台 Web 服务器配置为连接到多个 IRIS 实例,连接的 IRIS 实例名称。
HTTPS来自 IRIS 启动器的链接是否使用 HTTPS
Authentication Method选择 Kerberos1 或密码 2
Connection Security Level仅适用于 Kerberos 1。选择 Kerberos、具有数据包完整性的 Kerberos 或具有加密的 Kerberos
Windows IRIS Telnet Server仅适用于 Kerberos 1。如果要定义与 Windows 服务器的连接,请选中此复选框。
Service Principal Name仅适用于 Kerberos 1。此字段预先填充了输入的 IP 地址的推荐服务主体名称格式“cache/<FQHN>”(FQHN 是完全限定的主机名)。
Comment可选 - 远程服务器的描述。
0
0 158
文章 姚 鑫 · 九月 20, 2022 2m read

第三十八章 在 UNIX®、Linux 和 macOS 上使用 IRIS(三)

管理 IRIS

shell 中,具有 sysmgr 组中任何用户 ID 的用户都可以运行 iris,它调用 install-dir/bin 目录中的 IRIS 可执行文件和脚本.以下部分描述了如何在 IRIS 实例上执行这些管理任务:

重要提示:安装的所有者拥有启动和停止实例、执行系统管理以及为该实例运行诊断程序的完全权限。

只有作为实例所有者的用户 ID 才能并且应该运行所有诊断活动。这确保创建的任何文件或资源都归实例所有者所有,而不是 root(这可能使非 root 用户无法访问这些资源)。因此,不建议 root 以任何方式管理不属于 root 的实例(包括启动和停止实例)。以 root 身份运行的用户应该只管理 root 拥有的实例。

启动 IRIS

要启动 IRIS,请在系统级别运行启动程序。此过程激活默认配置文件或您指定的配置文件。

注意:如果在启动 IRIS 时遇到任何问题,请按照“监控指南”的“监控日志文件”部分中的说明查看 messages.log 文件。

如果不在控制台机器上,请运行 Telnet 并连接到安装了 IRIS 的目标机器。在可以在 UNIX® 上启动 IRIS 之前,必须满足以下条件之一:

  • 超级用户。
  • 已以 root 用户身份登录。 (从另一个帐户登录时,可以接受 su(超级用户)为 root。)
  • UNIX®ID 与在 IRIS 安装期间命名的组匹配,因为它具有停止和启动系统的权限。

使用 iris 命令启动 IRIS

iris start <instname>

其中 instname 是要启动的 IRIS 实例的名称。

shell 中,具有 sysmgr 组中任何用户 ID 的用户都可以运行 iris start。此命令验证实例当前未在当前节点或其他节点上运行,创建共享内存和基本 IRIS 守护进程,包括多个辅助写入守护进程 (AWD),运行启动 (^STU) 例程,该例程创建额外的守护进程(用于例如,ECP 守护程序),然后允许用户登录。

运行 IRIS

shell 中,具有任何用户 ID 和任何组 ID(本例中为 anyuser:anygroup)的用户可以运行执行 irisuxsessioniris 终端在 install-dir/bin 目录中。

作为 anyuser:irisusr 运行, IRIS 运行其标准启动逻辑,包括 Kerberos 协商,以识别 $USERNAME 和一组登录角色。在许多情况下,此 $USERNAME 值与调用 iris 终端的实际用户相关联。因此,尽管任何用户都可以运行

0
0 93
文章 姚 鑫 · 九月 12, 2022 3m read

第三十章 管理许可(三)

确定许可证容量和使用情况

如何知道已使用了多少许可证以及由谁使用?类中的 %SYSTEM.License 提供了到 IRIS 许可证应用程序编程接口 (API) 的接口,并提供了许多方法和相关查询,可以使用这些方法和相关查询来查询许可证容量和当前使用情况。

可以使用 %Library.%ResultSet 类的 RunQuery 方法运行多个许可查询。例如:

USER>do ##class(%ResultSet).RunQuery("%SYSTEM.License","Summary")
 
LicenseUnitUse:Local:Distributed:
当前使用的软件许可单元 :2:2:
使用的最大软件许可单元数 :3:2:
授权的软件许可单元 :25:25:
当前连接 :2:2:
最大连接数 :6:6:

可以从管理门户的许可证使用页面(系统操作 > 许可证使用)查看这些查询的输出,详细信息如下表所示:

许可证使用页面上的链接License Query
SummarySummary() — 返回许可证使用摘要,如 $System.License.ShowSummary 所示。
Usage by ProcessProcessList() — 返回操作系统进程标识符 (PID) 使用的许可证,如 $System.License.DumpLocalPID 所示。
Usage by UserUserList() —按用户 ID 返回许可证使用。
Distributed License UsageAllKeyConnectionList() — 返回按用户排序的当前分布式许可证使用情况。 (当没有连接许可服务器时禁用此功能。)

还可以使用 %SYSTEM.License 中的以下类方法来显示信息,或将许可证数据库转储到文件中:

$System.License.CKEY 显示密钥。该子例程由 ^CKEY 程序调用,该程序为保持兼容性而保留:

USER>Do $System.License.CKEY()
 
InterSystems IRIS Key display:
Based on the active key file 'c:\intersystems\irishealth\mgr\iris.key'
 
     LicenseCapacity =   InterSystems IRIS 2021.2 Enterprise - Concurrent Users for x86-64 (Microsoft Windows):25, Natural Language Processing (NLP), En
     CustomerName =      ISC DC Moderators - Xin Yao
     OrderNumber =       202224285
     ExpirationDate =    7/15/2023
     AuthorizationKey =  4125500002500002500000XXXXXXXXXXXXXXXXX01
     MachineID =
 
     当前可用 =     23
     最小可用 =     22
     最大可用 =     25

$System.License.ShowCounts 总结了在本地系统共享内存中跟踪的许可证使用情况:

USER> Do $System.License.ShowCounts()
 
本地软件许可使用视图.
 
     25     授权的总数量 LU
     23     当前可用 LU
     22     最小可用 LU
      2     当前用户处于活动状态
      3     处于活动状态的最大用户数
      1     当前 CSP 用户处于活动状态
      1     处于活动状态的最大 CSP 用户数
      0     当前 CSP 会话处于宽限期
      0     处于宽限期的最大 CSP 会话数

.License.ShowServer 显示活动的许可证服务器地址和端口:

USER> Do $System.License.ShowServer()
 
活动软件许可服务器地址 = 127.0.0.1 端口 = 4002

如果开发了基于 REST 的应用程序,许可证将随着使用而消耗。为防止这种情况发生,请配置可以建立的 Web Gateway 连接数。从 Web Gateway 管理部分的管理门户:

  1. 导航到服务器访问。
  2. 选择无状态参数。
  3. 将最大值设置为比许可证小 23 的数字,以允许服务器端登录。

注意:根据应用程序的服务器端需求,需要对此进行调整。

通过在所有可用连接都忙时执行此操作,新请求将排队而不是被拒绝。由于超出许可计数,不会看到拒绝。随着数量的增长,客户端的响应时间会减慢。这表明需要购买更多许可证。

1
0 195
文章 Jingwei Wang · 九月 20, 2022 2m read

1. VMWare快照引起的网络中断导致非计划内主备机切换问题

1.1 问题描述

在创建虚拟机快照时,虚拟机需要短时间的冻结,这个短时间冻结通常指虚拟机静默,在静默过程中网络连接处于中断状态。由于数据库的不断增长,使用VMWare快照的方式对虚拟机进行备份的时长也会不断增加,当对虚拟机进行快照的时长长于InterSystems镜像服务质量 (QoS) 超时时间,即当主机网络中断超过QoS超时时间,仲裁机与备机观察并相互确认与主机的连接丢失后,将发起切换过程,使原备机成为主机并将虚拟IP从主机MAC地址解绑后重绑定到备机的MAC地址上。特别需要注意的是,在这种由于网络中断引起的切换中,仲裁与备机都无法得知主机的实际工作状态。因此,在主机网络连接恢复后,为了为了避免因切换期间主机还在处理数据导致主备机间数据不一致,备机主动发起请求让主机下线,关闭主机,此时主机状态显示为关闭(Down)。

1.2 解决方案

对于由于虚拟机快照引起的网络中断造成的非计划内主备切换问题,请参考以下两种解决方案:

0
0 114
文章 姚 鑫 · 九月 19, 2022 3m read

第三十七章 在 UNIX®、Linux 和 macOS 上使用 IRIS(二)

在 UNIX® 上启动

IRIS 实例使用以下资源来控制启动、停止和创建新进程:

  • install-dir\mgr 目录中的 iris.ids 文件。
  • 共享内存。

守护进程资源锁

IRIS 使用建议文件锁定来防止同一实例在不同机器上的多次启动。使用咨询文件锁定,单个锁定文件(在本例中为 install-dir/mgr 目录中的文件 ilock)可用于独占锁定多个资源。控制进程、写入守护进程和日志守护进程分别锁定锁定文件的一个单独部分。如果 ilock 文件的这一部分已被锁定,则启动将终止。不同守护进程持有的锁称为守护进程资源锁。

文件锁由进程持有,直到进程终止。因此,如果持有任何锁,则表明某个节点上的某个守护进程正在运行。但是,它并不表示实例是否健康并正常运行。

iris.ids File

iris.ids 文件包含启动 IRIS 的节点的名称。 iris.ids 文件的存在充当 ObjectScript 实用程序和客户编写的脚本的标志,指示实例是否启动并运行。该文件在启动过程中经常被忽略。但是,如果在读取 iris.ids 时发生错误,则会阻止 IRIS 启动。在以前版本的 IRIS 中,共享内存标识符也存储在 iris.ids 文件中,但现在不再如此。

启动顺序

为了更好地理解启动顺序,假设实例可以从两 (2) 个不同的节点(机器),节点 A 和节点 B 运行。 iris.ids 文件对两个节点都是可见的,守护进程资源锁(对于共享文件)。然而,共享内存本身仅在创建它的节点(即启动 IRIS 的节点)上可见。

步骤 1. 检查实例状态

启动例程运行 irisdb –cV 以找出实例的状态。它首先尝试附加到实例的共享内存:

  • 如果实例没有共享内存,则对 Daemon Resource Locks 进行测试:
    • 如果没有持有守护进程资源锁,则报告实例“关闭”。

    • 如果持有守护进程资源锁,则报告该实例正在 iris.ids 文件中指定的节点上运行。如果 iris.ids 文件不存在,则没有关于守护程序运行位置的信息。

      操作:用户必须运行 iris stopiris force 来停止相应节点上正在运行的实例。这将停止守护进程并删除 iris.ids 文件。

  • 如果附加成功,则假定系统已启动并正在运行。将此状态报告给用户。启动停止。
  • 如果显示错误提示无法完成启动,因为仍然附加共享内存,请等待几分钟以释放内存。如果错误仍然存在,则可能存在与 iris.shid 文件相关的错误,该文件在除 macOS 之外的所有 UNIX® 平台上跟踪 IRIS 的共享内存 ID。联系 全球响应中心在新选项卡 (WRC) 中打开以获取更正文件的支持。

步骤 2. 启动 RIS

运行 IRIS 启动过程。重复检查以确保另一个启动不竞争启动资源:

  • 如果守护进程资源锁被持有,表明一个或多个守护进程正在这个实例的某个节点上运行, IRIS 报告这一点并退出并出现错误。启动停止。

    如果 iris.ids 文件不存在,则运行守护程序的节点是未知的。

    行动:用户必须假设在某个节点上发生了另一次启动。要确定实例在哪个节点上启动,请检查 iris.ids 文件。

IRIS 继续启动。

0
0 178
文章 姚 鑫 · 九月 18, 2022 3m read

第三十六章 在 UNIX®、Linux 和 macOS 上使用 IRIS(一)

本章介绍Unix®LinuxMacOS上的特定管理程序。

UNIX® 用户、组和权限

UNIX® 平台上的每个 IRIS® 数据平台安装都有以下用户和组:

  • RootIRIS 必须由 root 安装, IRIS 系统守护程序的某些处理以 root 身份运行。
  • 实例所有者 — 此用户拥有大多数安装文件并完全控制实例。如果使用最小初始安全设置进行安装,则 root 是默认所有者;否则,在安装过程中会提示输入所有者。
  • IRIS 超级服务器及其作业的有效用户——所有由超级服务器生成的用于处理传入请求的 IRIS 进程都以此用户身份运行;此外,由作业服务器进程、任务管理器作业和用户定义的启动例程(例如,^%ZSTART)托管的作业也以该用户身份运行。默认情况下,此用户是 irisusr,但可以在自定义安装期间更改用户。
  • IRIS 进程的有效组——所有 IRIS 进程自动作为该组运行,这允许普通用户在 IRIS 内访问他们可能没有被授予访问权限的 IRIS 数据库和日志文件;这些和其他 IRIS 文件的文件权限设置为允许该组具有适当的访问权限。在安全系统上,只有 IRIS 超级服务器及其作业的有效用户应该是该组的成员。默认情况下,该组包含 irisusr,但您可以在自定义安装期间更改该组。
  • 允许启动和停止实例的组 — 该组、root 和实例所有者可以启动和停止 IRIS

所有日志和日志目录必须将组所有权设置为 IRIS 进程组的有效组并授予该组的完全权限(rw 用于日志,rwx 用于日志目录)。拥有期刊和期刊目录的用户可能会有所不同,具体取决于它们的创建方式。

IRIS 中创建的日志和日志目录是使用适当的权限创建的。但是,如果在外部移动、复制或创建日志目录或日志(通过脚本或管理员操作),必须确保维护适当的权限。未能正确设置权限可能会导致意外和严重错误。

下面的示例假定 IRIS 进程的有效组是 irisusr 并且实例的所有者是 irisowner,尽管文件可能具有不同的用户所有权,具体取决于创建它们的上下文。例如:

journal directory    irisowner    irisusr    drwxrwxr-x 
20170801.001         irisowner    irisusr    -rw-rw----

注意:这些设置在一定程度上作为 IRIS 安装的 install-dir/bin 目录中可执行文件的权限集进行维护。相关属性包括:所有权、组、模式、set-uidset-gid 位。在操作系统级别执行管理任务时不要修改这些权限,这一点很重要。

数据库和数据库目录权限

所有数据库和数据库目录必须将组所有权设置为 IRIS 进程组的有效组,并授予该组完全权限(rw 用于数据库,rwx 用于数据库目录)。拥有数据库和数据库目录的用户可能会因创建方式而异。

IRIS 中创建的数据库和数据库目录是使用适当的权限创建的。但是,如果在外部移动、复制或创建数据库目录或数据库(通过脚本或管理员操作),则必须确保维护适当的权限。未能正确设置权限可能会导致意外和严重错误。

以下示例假设 IRIS 进程的有效组是 irisusr 并且实例的所有者是 irisowner,尽管文件可能具有不同的用户所有权,具体取决于创建它们的上下文:

dataset directory    irisowner    irisusr    drwxrwxr-x 
IRIS.DAT            irisowner    irisusr    -rw-rw----
0
0 195
问题 争取在天亮前起床 · 七月 14, 2022

在更新医保码库前,我们想对旧码库做个备份,以防更新过程失败,还可以还原。
oracle支持 CREATE TABLE AS ..... 的语法快速备份一张表,cache 似乎不支持这个语法,
大家平时是怎么备份一张码表的呢?

最好是像 oracle 那样一条命令搞定的那种。

10
0 334
文章 姚 鑫 · 九月 17, 2022 7m read

第三十五章 在 Windows 上使用 IRIS(二)

IRIS 启动器

Microsoft Windows 平台上的主要IRIS 界面是 IRIS 启动器。从 IRIS 启动器,可以启动所有 IRIS 配置和管理工具。还可以从快捷方式或命令行调用每个启动器命令。

相应地,可以从 Windows 程序菜单中启动许多 IRIS 工具,方法是指向 IRIS 文件夹,然后指向启动 IRIS 以获得适当的 IRIS 实例名称。

当在基于 Windows 的系统上启动 IRIS 时, IRIS 启动器图标会出现在任务栏的系统托盘中。

当单击 IRIS 启动器时,会出现一个菜单,其中包含使用 ObjectScript 实用程序和编程环境的命令。

下表描述了 IRIS 启动器菜单中可用的命令。

IRIS 启动器命令描述
Getting Started显示教程、发行说明、文档和其他相关信息的链接
Start IRIS启动菜单项后方括号中指定的默认实例,例如 [ii2081]。如果 IRIS 服务器已经启动,这个选项会变暗——它不可用。
Stop InterSystems关闭或重新启动本地 IRIS 实例。如果 IRIS 服务器已停止,此选项将显示为灰色——它不可用。
Studio创建、编辑、删除和编译 IRIS 类定义和例程。
Terminal调用 IRIS 的命令行解释器。
Management Portal执行常见的系统管理任务。创建数据库和命名空间,并调整所有 IRIS 配置设置。显示类、全局变量和例程,以及用于管理它们的函数。显示表和视图,执行查询和 SQL 管理功能。
Documentation显示 IRIS 在线文档。
Preferred Server [server name]显示远程服务器列表并使用子菜单上的“添加/编辑”命令维护服务器连接。首选服务器出现在括号中,并且在服务器列表中旁边有一个复选标记。
About显示 IRIS 版本和构建信息。
Exit从系统托盘中删除IRIS 启动器图标;这不会停止 IRIS。当实例重新启动时,启动器会重新出现。

启动 IRIS

要启动 IRIS,请在系统级别运行启动程序。此过程使用默认配置文件或指定的配置文件运行。

注意:如果在启动 IRIS 时遇到任何问题,请按照“监控指南”的“监控日志文件”部分中的说明查看 messages.log 文件。

要在 Windows 平台上启动 IRIS,请从 IRIS 启动器中选择启动 IRIS。这将使用指定的配置文件启动 IRIS 实例。当 IRIS 未运行时, IRIS 启动器图标显示为灰色。

如果 IRIS 启动器不在系统托盘中,请从 Windows 程序菜单中选择 IRIS 文件夹并为该实例启动 IRIS。要将启动器返回到系统托盘,请转到 install-dir/bin 目录并双击 iristray.exe 文件。

或者,可以从“开始”菜单上“运行”命令的“打开”框中的 install-dir/bin 目录输入这些命令。例如,要从 MyIris\bin 目录启动名为 MyIris 的实例,请输入以下命令:

c:\MyIris\bin\iris start iris

停止 IRIS

通常让 IRIS 系统保持运行。但是,如果操作系统需要重新启动,请在关闭系统之前停止 IRIS。诸如备份和数据库修复实用程序等维护任务不需要停止 IRIS

IRIS 启动器菜单中单击停止 以关闭或重新启动本地 IRIS 实例。默认情况下,此选项使用默认关闭例程立即关闭(或重新启动) IRIS。但是,它还提供了设置延迟关闭的计时器、运行用户定义的关闭例程、向服务器上的用户广播警告消息以及关闭而不进行故障转移的选项。可以从 Windows 程序菜单运行相同的过程。为该实例名称选择 IRIS 文件夹并停止 IRIS。一旦倒计时达到 0 并且关机程序已开始,将无法取消关机。

image

重要提示:InterSystems 建议运行 Stop IRIS 来关闭 IRIS 以确保其正确关闭。

删除 Stop InterSystems 命令

为防止意外执行 Stop InterSystems 命令,可以通过从相应 IRIS 实例的 install-dir/bin 目录中删除 irisstop.exe 文件来从 IRIS 启动器中删除该命令。还可以从“开始”菜单中的相应 IRIS 实例中删除停止 InterSystems 快捷方式。指向 Programs 和 IRIS 实例名称,然后右键单击 Stop 并单击 Delete

从命令提示符控制 IRIS

可以通过运行 install-dir\bin 目录中的 iris.exe 程序从 Windows 命令提示符控制 IRIS 实例。

要显示此命令的最新帮助信息,请从 IRIS install-dir\bin 目录调用 iris 帮助。例如:

C:\InterSystems\IRISHealth\bin>iris help
usage:
       iris start <instance> [<cpf_file>]
           to start instance <instance>, optionally using the specified .cpf file.

           An optional /EmergencyId=Username,Password can be used to start
           InterSystems IRIS in emergency mode.  When the EmergencyId argument
           is supplied, the system starts up in emergency mode in which only the
           baseline databases are mounted and access to InterSystems IRIS is
           governed by InterSystems IRIS login using that username and password.
           Emergency mode is supplied to give access in the event that privileged
           users are not available or their password is forgotten.  Emergency
           startup is only available from an administrator account.

           When InterSystems IRIS is started in emergency mode, the IRIS control
           service is not used. This means that if you log out of Windows, all
           the InterSystems IRIS processes will immediately exit.

   or: iris startnostu <instance>
           to start instance <instance> without running ^STU.

   or: iris stop <instance>
           to shut down instance <instance>.

   or: iris stopnoshut <instance>
           to shut down instance <instance> without running user shutdown routines.

   or: iris stopstart <instance>
           to shut down and restart instance <instance>.

Note:  An optional /nofailover argument can be specified for stop,
       stopnoshut, or stopstart to not trigger a mirror failover.

   or: iris force <instance>
           to force down instance <instance>.

   or: iris [ run OR console OR terminal ] <instance>
           to run InterSystems IRIS in programmer mode with
           [ no-device OR console OR terminal ] for $Principal.

   or: iris [ run OR console OR terminal ] <instance> <Rou>
           to run InterSystems IRIS routine <Rou> in application mode with
           [ no-device OR console OR terminal ] for $Principal.

   or: iris [ run OR console OR terminal ] <instance> <Rou> <namespace>
           to run InterSystems IRIS routine <Rou> in <namespace> in application
           mode with [ no-device OR console OR terminal ] for $Principal.

   or: iris runw <instance> <Rou> [<namespace>]
           to run InterSystems IRIS routine <Rou> in application mode with
           no input/output device for $Principal using the optional namespace.
       When run from a batch script, iris will wait for the InterSystems IRIS
       process to terminate before returning. The exit code from the InterSystems
       IRIS process will be returned by iris.

Note:  An optional /Title="Title string" can specify the console
       or terminal title bar text.

   or: iris iristraystart <instance>
           to start IRISTray for instance <instance>.

   or: iris iristraystop <instance>
           to stop IRISTray for instance <instance>.

   or: iris licmanagerstop <instance>
           to stop licmanager running in instance <instance>.

   or: iris all [> outputfile]
           to list all installed instances.

   or: iris allw [> outputfile]
           to list (wide format) all installed instances.

   or: iris list [<instance>] [> outputfile]
           to list information about all installed instances or the
           specified instance.

   or: iris qlist [<instance>] [> outputfile]
           to display a quick list of information about all installed
           instances or the specified instance, in a format suitable
           for parsing in command scripts.
   The record for an instance contains fields separated by "^" (carats):
           Field 1: instance name
           Field 2: instance directory
           Field 3: version identifier
           Field 4: current status for the instance
           Field 5: configuration file name last used
           Field 6: SuperServer port number
           Field 7: WebServer port number
           Field 8: JDBC Gateway port number
           Field 9: Instance status (e.g., ok, warn, alert)
           Field 10: Product name of the instance
           Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery)
           Field 12: Mirror Status (e.g., Primary, Backup, Connected)

   or: iris serverlist [> outputfile]
           to list information about all defined servers.

Note:  When  [> outputfile] is present, output is redirected
       to the file instead of being displayed on the terminal.

   or: iris telnetstop <instance>
           to stop the InterSystems IRIS TELNET daemon.

   or: iris telnettrace <instance>
           to toggle the TELNET trace state.

   or: iris iristrmdstop <instance>
           to stop the InterSystems IRIS terminal daemon.

Note:  iris often displays error information in a message box.
       You can suppress the message box containing error information
       by adding "quietly" (without the quotation marks) as the
       final argument to the iris command.

   or: iris help [display]
           to show this help. If display is specified the help
           is displayed in a browser window.

iris help 命令将在终端中显示最新的帮助信息。还可以通过将 >outputfilename 添加到 iris 帮助命令,将帮助信息保存到 intsall-dir\bin 目录中的文件中。例如:

C:\MyIris\bin>iris help>helpinformation

在命令行上连接到 IRIS

可以使用 iris 终端命令在命令行上登录 IRIS 实例。

0
0 305
文章 姚 鑫 · 九月 16, 2022 3m read

第三十四章 在 Windows 上使用 IRIS(一)

Microsoft Windows 平台上管理 IRIS 数据平台实例非常简单。可以使用管理门户和 IRIS 启动器执行大多数任务。还可以从命令提示符控制 IRIS 实例。

本主题使用 install-dir 来指代 IRIS 安装目录——可以在安装指南的默认安装目录部分找到默认目录。

注意:不要对 IRIS IRIS.DAT 数据库文件使用 Windows 文件压缩。 (通过右键单击 Windows 资源管理器中的文件或文件夹并选择属性,然后选择高级,然后压缩内容以节省磁盘空间来压缩文件;压缩后,文件夹名称或文件名在 Windows 资源管理器中呈现为蓝色。)如果压缩一个IRIS.DAT 文件,它所属的实例将无法启动,并出现误导性错误。

管理对 IRIS 实例的访问

InterSystems 服务

所有 IRIS job和进程都从 InterSystems 服务、 IRIS Controller for <instance-name> 运行。 InterSystems 服务具有的权限由其关联的 Windows 用户帐户决定。当这是本地 SYSTEM 帐户时, IRIS 可以访问 Windows 系统上的所有文件和权限。为了维护一个更安全和限制性更强的环境,应该为服务选择一个仅具有所需权限和访问权限的 Windows 帐户。

在正常安装和锁定安装中, IRIS 创建两个本地用户组来授予对实例的访问权限。当为 InterSystems 服务指定一个 Windows 用户帐户而不是默认的本地 SYSTEM 帐户时 IRIS 将该 Windows 用户帐户添加到每个组。这些组是:

  • IRISServices,它授予启动、停止和控制 IRIS 实例的权限。
  • IRIS_Instance_instancename,授予对安装树的访问权限——IRIS 的安装目录及其所有子目录。

注意:这些组可能不会授予 IRIS 执行某些操作所需的所有权限。要确保 IRIS 对安装树之外的所有实例、日志和日志文件具有所需的访问权限,请授予 IRIS_Instance_instancename 组对这些文件和包含它们的目录的完全访问权限。如有必要,还可以授予该组额外的权限。

通常,在安装期间为 <instance-name> 选择 IRIS 控制器的 Windows 帐户,如安装指南的 Windows 用户帐户部分所述。

限制对安装树的访问

默认情况下,任何经过身份验证的 Windows 用户都可以访问安装树,这可能是不可取的。以下命令为经过身份验证的用户删除 Windows 访问控制条目 (ACE):

icacls <install-dir> /remove "NT AUTHORITY\Authenticated Users"

运行此命令后,只有管理员用户或 IRIS_Instance_instancename 组中的用户才能访问安装树。

重要提示:如果不这样做,任何可以登录到主机 Windows 系统的用户都可以轻松地修改文件、更改设置或完全禁用 IRIS 实例。

在某些情况下,除了 IRIS 控制器用于 <instance-name> 服务的帐户之外,可能还希望授予另一个 Windows 帐户访问安装树的权限。例如,这可能包括运行自动化任务的帐户,或直接登录到 Windows 服务器以访问 IRIS 的帐户(通过本地终端会话或调用自定义调用可执行文件)。可以通过将任何此类帐户添加到 IRIS_Instance_instancename 组来为其提供所需的访问权限。

更改 InterSystems 服务帐户

在命令行中输入以下内容以更改用于 IRIS Controller for <instance-name> Windows 用户帐户:

<install-dir>\bin\IRISinstall.exe setserviceusername <instance-name> <username> <password>

此命令将 Windows 用户帐户更改为指定的帐户。它还将用户添加到 IRISServicesIRIS_Instance_instancename 组,并在必要时创建这些组。运行此命令并重新启动 IRIS 实例后,该实例将在新指定的 Windows 用户帐户下运行。

0
0 263
文章 姚 鑫 · 九月 15, 2022 3m read

第三十三章 管理许可(六)

应用许可

应用程序许可使应用程序合作伙伴能够利用 的许可功能来实现自己的许可目的。 IRIS 像管理自己的应用程序许可证一样管理客户应用程序许可证,维护使用计数并根据需要获取和返回用户许可证。当进程退出、停止或从进程表中删除时,或者当 Web 会话超时或被删除时,进程或 Web 会话使用的应用程序许可证与进程或会话使用的 IRIS 许可证一起自动释放。

应用程序许可证只是标准 .ini 格式的文件或此类文件的一部分,包含标识应用程序的部分标题和一些keyword=value对,在许可证中是唯一的,代表许可的功能。任何格式正确的应用程序许可证都可以在运行时由应用程序加载到 IRIS

应用程序许可 API 包括使应用程序能够代表用户使用和返回许可证的方法和查询,以及使程序能够获取有关应用程序和功能许可的信息,包括正在使用和仍然可用的许可证数量。

加载应用程序许可证

IRIS 实例可以在应用程序运行时使用 $SYSTEM.License.LoadAppLicenseFile 方法加载和激活任何应用程序许可,该方法记录在 %SYSTEM.License 的类参考中(请参阅应用程序许可 API)。以这种方式加载的应用程序许可证与活动的 IRIS 许可证无关,但由 IRIS 实例独立跟踪。

每个应用程序许可证都包含在以 [AppName] 开头的部分中;应用程序名称 (AppName) 不能包含句点 (.)。许可证的其余部分由一系列不重复的keyword=value对组成,表示已获得许可的功能。

在以下示例应用程序许可证中,客户使用关键字=值对来限制多个应用程序功能的许可用户数量,并为所有用户启用扩展实验室报告功能。

[BestLabApplication]
Lab Users=50
Lab Administrators=2
Lab Devices=5
Extended Lab Reports=Enabled

应用程序许可证不受 IRIS 篡改保护,但可以通过自定义应用程序代码进行保护。例如,校验和可以嵌入关键字部分并在激活之前由应用程序验证。

应用程序许可 API

类中的 %SYSTEM.License 提供了以下管理应用程序许可证的方法:

%SYSTEM.License MethodDescription
LoadAppLicenseFile从文件加载应用程序许可证。
GetAppLicense将当前加载的应用程序许可证的内容作为关键字=值对的字符串返回。
GetAppLicenseMaxUsed检索自加载许可证以来与应用程序许可证关键字关联的已用许可证单元的最大数量。
GetAppNames返回当前由应用程序合作伙伴或两者授权的应用程序的名称。
IsAppLicensed指示应用程序或功能是否已获得许可。
TakeApplicationLicense使用应用程序和功能的许可证单元。当前进程的许可证用户 ID(或者在 CSP 的情况下,会话许可证 ID)是与使用的应用程序许可证相关联的用户标识符。
ReturnApplicationLicense发布应用程序许可证和功能的许可证单元,包括与当前进程的许可证用户 ID 关联的许可证资源,或者在 CSP 的情况下为会话许可证 ID
SetConnectionLimit设置此实例上每个用户允许的最大连接数。这使系统管理员能够阻止用户使用所有可用的许可证单元
ApplicationServerLogin指示使用当前加载的应用程序许可证的实例数是否超过密钥中指定的限制。
GetAppLicenseValue检索与应用程序许可证功能关键字关联的值。
GetAppLicenseMinimum检索与应用程序许可证功能关键字关联的最小免费许可证单元数,其中与关键字关联的值为数字。
GetAppLicenseFree检索与应用程序许可证功能关键字关联的免费许可证单元数,其中与关键字关联的值为数字。
GetProcessAppsTaken检索为进程 PID 使用的应用程序许可证类型的 $List 或“”为无
ApplicationUserList返回用户 ID 使用的许可证和应用程序许可证。
0
0 78
文章 Michael Lei · 九月 15, 2022 6m read

如果你读了我之前介绍QEWD微服务的文章,希望你会渴望了解如何使用它们。  所以在这篇文章中,我将解释你需要知道的东西,以便开始使用。

如果你在QEWD资源库中,你会发现目录: 

  https://github.com/robtweed/qewd/blob/master/example/jwt

在我之前关于JSON网络令牌(JWTs)和QEWD的文章中,我用这个示例应用程序来解释如何使用JWTs。  这个示例应用程序还演示了如何设置一个简单的微服务,在这种情况下是一个处理用户认证的服务。  所以,现在让我深入了解一下这个例子应用程序的这方面内容。

如果你想使用QEWD微服务,你也必须使用JWTs--它们提供了一种方法,用户的认证和会话可以被多个独立的QEWD服务器交叉通信和处理。  因此,请看一下启动文件:

   https://github.com/robtweed/qewd/blob/master/example/jwt/startup_file/q…

你会看到,它将QEWD配置为使用JWT,并定义了用于签署和加密JWT的加密字符串:

           jwt: {
            secret: 'someSecret123'
          },

而且,你可以看到如何定义微服务:

0
0 189
文章 姚 鑫 · 九月 14, 2022 6m read

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

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
0 110
文章 姚 鑫 · 九月 13, 2022 4m read

[toc]

第三十一章 管理许可(四)

显示本地许可证信息的方法

下面列出的子例程转储实例共享内存中本地包含的许可证表的内容。一般来说,他们识别客户:

$System.License.DumpLocalAll 将所有本地许可证表条目转储到当前目录中的 all.dmp 文件中:

USER> Do $System.License.DumpLocalAll()
 
25 条目转储到 c:\intersystems\irishealth\mgr\user\all.dmp

all.dmp 文件的内容示例:

image

$System.License.DumpLocalInUse 将所有正在使用的本地许可证表条目转储到当前目录中的 inuse.dmp 文件:

USER> Do $System.License.DumpLocalInUse()
 
2 条目转储到 c:\intersystems\irishealth\mgr\user\inuse.dmp

inuse.dmp 文件内容示例:

image

$System.License.DumpLocalPID 将进程 ID 使用的本地许可证表转储到当前目录中的 piduse.dmp 文件中:

USER> Do $System.License.DumpLocalPID()
 
33 条目转储到 c:\intersystems\irishealth\mgr\user\piduse.dmp

image

显示许可证服务器信息的方法

以下子例程转储许可证服务器维护的许可证表的内容。输出文件位于运行活动许可证服务器的主机上的指定目录中。

$System.License.ShowSummary 显示许可证服务器上的许可证信息摘要。分布式许可证使用部分提供许可证服务器当前支持的所有 IRIS 实例的许可证使用的集体视图。本地许可证使用部分展示了运行程序的单个 IRIS 实例的许可证使用视图:

USER> Do $System.License.ShowSummary()
 
软件许可服务器活动密钥摘要视图.
 
     分布式软件许可使用:
当前使用的软件许可单元 =        2
使用的最大软件许可单元数 =        2
授权的软件许可单元 =       25
 
     本地软件许可使用:
当前连接 =      2 最大连接数 =      6
当前用户 =      2 最大用户数 =      3

$System.License.DumpServer 将与运行此例程的服务器相关的许可服务器数据库信息转储到运行许可服务器的主机上的文件 dumpserver.txt 中:

USER> Do $System.License.DumpServer()
License server database dumped to:  c:\intersystems\irishealth\mgr\dumpserver.txt at LAPTOP-ARLL3DSO

image

$System.License.DumpServers 将所有已知服务器的许可证服务器数据库信息转储到运行许可证服务器的主机上的文件 dumpservers.txt 中:

USER> Do $System.License.DumpServers()
1 server database[s] dumped to:  c:\intersystems\irishealth\mgr\dumpservers.txt at LAPTOP-ARLL3DSO

image

$System.License.DumpKey 将此实例和共享它的实例使用的密钥转储到运行许可证服务器的主机上的文件 dumpkey.txt 中:

USER> Do $System.License.DumpKey()
License server Client data dumped to:  c:\intersystems\irishealth\mgr\dumpkey.txt at LAPTOP-ARLL3DSO

image

$System.License.DumpKeys 转储所有密钥,将使用它们的实例和客户端显示到运行许可证服务器的主机上的文件 dumpkeys.txt 中:

USER> Do $System.License.DumpKeys()
License server Client data (1 key[s]) dumped to:  c:\intersystems\irishealth\mgr\dumpkeys.txt at LAPTOP-ARLL3DSO

image

注意:请注意,本地许可方法显示的信息比许可服务器方法显示的信息更新;许可证服务器只定期更新,而本地数据是实时的。

可能会暂时超出许可限制,因为登录是在本地控制的,但许可服务器会强制执行该限制。每个实例根据其在实例共享内存中维护的本地许可证表允许或拒绝登录。每个实例都会定期向许可证服务器发送更新,描述本地许可证表的更改。如果所有实例的组合许可证使用超过限制,则许可证服务器将发送否定确认以更新来自每个实例的消息。

这种否定确认会导致每个实例拒绝新的登录,因为没有额外的许可单元可用。当尝试启动的 IRIS 进程的许可用户 ID 与任何当前进程的许可用户 `` 不匹配时,登录被视为新登录。这种状态一直持续到所有实例的组合使用量低于授权限制,此时许可证服务器开始发送肯定确认以响应实例更新。然后各个实例允许新的登录。

0
0 99
文章 姚 鑫 · 九月 11, 2022 5m read

第二十九章 管理许可(二)

激活许可证密钥

IRIS 使用许可证密钥来确保其注册站点的正常运行、定义可用容量并控制对 IRIS 功能的访问。 许可证密钥以许可证密钥文件的形式提供,通常命名为 iris.key

安装 IRIS 后,使用以下程序激活许可证密钥。始终可以使用相同的过程为任何已安装的实例激活新的许可证密钥(即升级密钥)。可以激活放置在管理门户可访问的任何位置的许可证密钥;作为激活的一部分,许可证密钥将作为 iris.key 复制到实例的 install-dir/mgr 目录(如果尚未命名)。

注意:也可以在 Windows 安装期间选择许可证密钥。执行此操作时,许可证会自动激活,并且许可证密钥会作为 iris.key 复制到实例的 install-dir/mgr 目录中;不需要此处描述的激活过程。

本节还讨论了许可证故障排除和在所有许可证单元都在使用时从操作系统命令行升级许可证。

要激活许可证密钥,请使用以下过程:

  1. 导航到许可证密钥页面(系统管理 > 许可 > 许可证密钥)。将显示有关当前活动许可证密钥的信息。如果尚未激活任何许可证,则会显示这一点,例如通过标记客户名称:缺少许可证或不可读。此页面包含一个打印按钮,可让轻松打印显示的信息。

  2. 单击激活许可证密钥并浏览到要激活的许可证密钥文件。当选择一个文件时,会显示有关它的信息,以便激活它之前验证是否拥有正确的许可证密钥;例如,它提供了所需的容量,并具有正确的到期日期。如果密钥无效,则会在错误消息中指出。如果许可证当前处于活动状态,则并排显示有关当前和选定许可证的信息。如果需要在激活后重新启动实例以使许可证密钥生效,则会记录这一点并提供原因。此对话框包括一个打印按钮,可让轻松打印有关当前活动许可证和选择的新许可证密钥的信息。

  3. 单击激活以激活新的许可证密钥;它作为 iris.key 复制到实例的 install-dir/mgr 目录,覆盖之前的许可证密钥(如果有)。如果需要,确认对话框会提醒重新启动实例,并在新许可证启用的功能少于当前许可证时向发出警告。

通过使用 Config.StartupLicenseID 属性,可以将实例配置为从许可证服务器请求许可证密钥。在实例启动时,如果不存在 iris.key 文件并且已定义 LicenseID,则实例会从许可证服务器请求并激活许可证密钥。

注意:相同的 LicenseID 必须在许可证密钥文件中,以及在需要下载许可证的实例上定义

一般情况下无需重启实例,但升级许可证密钥时存在限制。如果将许可证类型从 Power Unit 更改为任何其他类型,则不会自动激活新密钥;这应该是一个罕见的事件。

另一个限制是许可证升级从通用内存堆 (gmheap) 空间中消耗的内存量。如果 gmheap 空间不可用,则无法扩展许可表条目的数量。如果没有足够的 gmheap 空间可用于许可证升级,则会将一条消息写入消息日志。可以从“高级内存设置”页面(系统管理 > 配置 > 高级内存设置)增加 gmheap 设置的大小。

如果新的许可证密钥比现有密钥消耗至少 100064 KB 页的 gmheap 空间,则必须重新启动 IRIS 实例才能完全激活新的许可证密钥。这种情况很少遇到,因为每个页面至少代表 227 个许可证。

更新许可证密钥

要更新许可证密钥,请替换 KeyDirectory 中的密钥文件并运行 ReloadKeys^%SYS.LICENSE。每个实例上的许可证监视器 (^LMFMON) 每 30 分钟检查一次,以查看配置的 LicenseID 是否有不同的密钥,如果有,则尝试执行升级。

注意:虽然大多数升级在实时实例上成功,但某些情况可能需要重新启动实例。在这种情况下,许可证监视器会记录一个错误,并且直到第二天才尝试再次升级密钥(以避免记录重复的错误)。实例重启会在启动时加载新密钥。

许可证故障排除

如果在输入许可证并重新启动 IRIS 后只有一位用户可以登录,请使用管理门户进行调查。当选择按进程时,许可证使用页面(系统操作 > 许可证使用)显示正在运行的进程数。还可以使用门户从许可证密钥页面(系统管理 > 许可 > 许可证密钥)显示许可证信息,如激活许可证密钥中所述。如果密钥无效,则 CustomerName 字段包含说明。

还可以在消息日志和系统监控日志中查看许可证错误消息,可以在 Portal 的消息日志页面(系统操作 > 系统日志 > 消息日志)和系统监控日志页面(系统操作 > 系统日志)中查看> 系统监控日志),分别。 System Monitor 将许可证到期警告和警报写入这些日志,而 Health Monitor 则写入许可证获取警报和警告。当超过许可限制时,许可模块会将警报写入消息日志。在 Application Monitor 中,可以配置基于许可证指标的警报以发送电子邮件通知或呼叫通知方法。

$System.License.Help 显示可用于解决许可证问题的方法列表:

 Do $System.License.Help()

Administrator Terminal Session

有几个问题会阻止获得终端会话。当 IRIS 无法正常启动并进入单用户模式时,或者只是在没有可用许可证时,可能会发生这种情况。在这些情况下,可能需要创建管理员终端会话,该会话使用特殊许可证来解决问题。

Administrator Session on Windows

使用命令提示符导航到 install-dir\bin。然后,以管理员身份执行以下命令:

irisdb -s<install-dir>\mgr -B

这将从 IRIS 安装 bin 目录 (install-dir\bin) 运行 IRIS 可执行文件,指示 install-dir\mgr 的路径名(使用 -s 参数),并禁止所有登录,除了一个紧急登录(使用 - B 参数)。

例如,在默认目录中有一个名为 MyIRIS 的实例,该命令如下所示:

c:\InterSystems\MyIRIS\bin>irisdb -sc:\InterSystems\MyIRIS\mgr -B

Administrator Session on UNIX®, Linux, and macOS

使用命令提示符导航到 install-dir/bin 目录。然后,执行以下命令:

iris terminal <instance-name> -B

例如,在默认目录中安装了一个名为 MyIRIS 的实例,该命令如下所示:

User:/InterSystems/MyIRIS/bin$ iris terminal MyIRIS -B

从操作系统命令行升级许可证

%SYSTEM.License.Upgrade() 方法激活已复制到 installdir\mgr 目录的新许可证密钥。如果所有许可证单元都被用户使用,导致无法打开终端窗口,可以从命令行运行此方法以激活更大容量的新许可证密钥,如下所示:

iris terminal <instancename> -U %SYS '##Class(%SYSTEM.License).Upgrade()'
0
0 225