検索

Discussão (3)3
Entre ou crie uma conta para continuar
InterSystems Oficial
· Jul. 29

官方公告:InterSystems IRIS 2025.2 引入 IRISSECURITY

InterSystems IRIS 2025.2 引入了 IRISSECURITY 数据库,用于存储安全数据。 与之前用于存储安全数据的数据库 IRISSYS 不同,IRISSECURITY 支持加密,可以保护静态敏感数据。 在今后的版本中,IRISSECURITY 将可实现镜像。

此版本还引入了可以执行常规安全管理任务的 %SecurityAdministrator 角色。

本文中介绍的更改将影响持续交付 (CD) 和扩展维护 (EM) 版本通道。 也就是说,从版本 2025.2(CD,于 2025 年 7 月 23 日发布)和 2026.1 (EM) 开始,InterSystems IRIS 将包含 IRISSECURITY 数据库,并且在升级时,所有安全数据会自动从 IRISSYS 迁移到 IRISSECURITY。

虽然 InterSystems IRIS 2025.2 预计于 2025 年 7 月 23 日发布,但我们暂缓了 InterSystems IRIS for Health 和 HealthShare Health Connect 2025.2 的公开发布,原因是我们正在着手完成针对已知镜像问题的修复计划,该问题会影响 OAuth 配置数据。

升级须知

IRISSECURITY 对用户与安全数据的交互方式做出了多处可能导致功能中断的更改:

  • 用户无法再直接访问安全global,而必须使用各种安全类提供的 API。
  • OAuth2  Global无法再映射到其他数据库。
  • 用户无法再随意查询安全表,即使在 SQL 安全已禁用的情况下也是如此。
  • 系统数据库现在使用的预定义资源无法更改。 在 Unix 上,如果为之前版本的系统数据库创建并指定了新资源,在升级时,该新资源将被预定义资源替代(但如果有任何角色引用了非默认资源,则必须手动将其更改为使用默认资源,以保持数据库访问权限)。 在 Windows 上,必须将资源更改回默认资源。 如果您尝试在 Windows 上升级,而数据库具有非默认资源,升级将停止(实例不会修改),并会显示错误消息“Database must have a resource label of…”

以下各部分将详细介绍这些更改,以及在您依赖原始行为的情况下应采取的替代措施,但总体而言,在您进行升级之前,应当验证并测试您的应用程序和宏:

  • 使用提供的安全 API 管理安全功能(而非直接访问global)。
  • 拥有使用这些 API 所必需的权限(%DB_IRISSYS:RAdmin_Secure:U)。

Global 访问

之前,当安全global存储在 IRISSYS 数据库中时,用户可以通过以下权限访问安全数据:

  • %DB_IRISSYS:R:直接读取和通过安全 API 读取安全global。
  • %DB_IRISSYS:RW:读取和写入安全global。
  • %DB_IRISSYS:RWAdmin_Secure:U:通过安全 API 管理安全功能。

在 InterSystems IRIS 2025.2 中:

  • 用户无法再直接访问安全global。
  • %DB_IRISSYS:R%Admin_Secure:U 这两个权限是访问安全数据(通过提供的安全 API)以及通过各种安全类管理安全功能所需的最低权限。
  • 对于常规安全管理,您可以使用新的 %SecurityAdministrator 角色。
  • 已移除对安全数据的只读访问权限(之前可以通过 %DB_IRISSYS:R 实现)。

Global 存储位置

在 InterSystems IRIS 2025.2 中,以下安全global已从 IRISSYS 迁移到 IRISSECURITY 中的 ^SECURITY

  • ^SYS("SECURITY")
  • ^OAuth2.*
  • ^PKI.*
  • ^SYS.TokenAuthD

下表列出了已迁移的最关键的global及其安全类、原存储位置和新存储位置:

安全类 原存储位置 (IRISSYS) 新存储位置 (IRISSECURITY)
不适用 ^SYS("Security","Version") ^SECURITY("Version")
Security.Applications ^SYS("Security","ApplicationsD") ^SECURITY("ApplicationsD")
Security.DocDBs ^SYS("Security","DocDBsD") ^SECURITY("DocDBsD")
Security.Events ^SYS("Security","EventsD") ^SECURITY("EventsD")
Security.LDAPConfigs ^SYS("Security","LDAPConfigsD") ^SECURITY("LDAPConfigsD")
Security.KMIPServers ^SYS("Security","KMIPServerD") ^SECURITY("KMIPServerD")
Security.Resources ^SYS("Security","ResourcesD") ^SECURITY("ResourcesD")
Security.Roles ^SYS("Security","RolesD") ^SECURITY("RolesD")
Security.Services ^SYS("Security","ServicesD") ^SECURITY("ServicesD")
Security.SSLConfigs ^SYS("Security","SSLConfigsD") ^SECURITY("SSLConfigsD")
Security.System ^SYS("Security","SystemD") ^SECURITY("SystemD")
Security.Users ^SYS("Security","UsersD") ^SECURITY("UsersD")
%SYS.PhoneProviders ^SYS("Security","PhoneProvidersD") ^SECURITY("PhoneProvidersD ")
%SYS.X509Credentials ^SYS("Security","X509CredentialsD") ^SECURITY("X509CredentialsD ")
%SYS.OpenAIM.IdentityServices ^SYS("Security","OpenAIMIdentityServersD") ^SECURITY("OpenAIMIdentityServersD")
OAuth2.AccessToken ^OAuth2. AccessTokenD ^SECURITY("OAuth2.AccessToken ")
OAuth2.Client ^OAuth2.ClientD ^SECURITY("OAuth2.Client")
OAuth2.ServerDefinition ^OAuth2.ServerDefinitionD ^SECURITY("OAuth2.ServerDefinitionD")
OAuth2.Client.MetaData ^OAuth2.Client.MetaDataD ^SECURITY("OAuth2.Client.MetaDataD")
OAuth2.Server.AccessToken ^OAuth2.Server.AccessTokenD ^SECURITY("OAuth2.Server.AccessTokenD")
OAuth2.Server.Client ^OAuth2.Server.ClientD ^SECURITY("OAuth2.Server.ClientD")
OAuth2.Server.Configuration ^OAuth2.Server.ConfigurationD ^SECURITY("OAuth2.Server.ConfigurationD")
OAuth2.Server.JWTid ^OAuth2.Server.JWTidD ^SECURITY("OAuth2.Server.JWTidD")
OAuth2.Server.Metadata ^OAuth2.Server.MetadataD ^SECURITY("OAuth2.Server.MetadataD")
PKI.CAClient ^PKI.CAClientD ^SECURITY("PKI.CAClient")
PKI.CAServer ^PKI.CAServerD ^SECURITY("PKI.CAServer")
PKI.Certificate ^PKI.CertificateD ^SECURITY("PKI.Certificate")
%SYS.TokenAuth ^SYS.TokenAuthD ^SECURITY("TokenAuthD")

OAuth2 Global 映射

之前,可以将 OAuth2 Global映射到其他数据库,从而可以镜像 OAuth2 配置。

在 InterSystems IRIS 2025.2 中,无法再映射 OAuth2 global,且不能镜像 IRISSECURITY。 如果您过去依赖此行为进行镜像,可以使用以下任何替代方法:

  • 手动对主节点和故障转移节点进行更改。
  • 从主节点导出设置,然后将其导入到故障转移节点(需要 % ALL 权限)。

导出 OAuth2 配置数据:

set items = $name(^|"^^:ds:IRISSECURITY"|SECURITY("OAuth2"))_".gbl"
set filename = "/home/oauth2data.gbl"
do $SYSTEM.OBJ.Export(items,filename)

导入 OAuth2 配置数据:

do $SYSTEM.OBJ.Import(filename)

SQL 安全

之前,SQL 安全由 CPF 参数 DBMSSecurity 控制。 当 DBMSSecurity 禁用时,拥有 SQL 权限的用户可以随意查询数据库中的所有表。

在 InterSystems IRIS 2025.2 中:

  • DBMSSecurity CPF 参数已被替换为系统范围的 SQL 安全属性。 可以通过多种方式对此进行设置:
    • 管理门户:System Administration > Security > System Security > System-wide Security Parameters > Enable SQL security(系统管理 > 安全 > 系统安全 > 系统范围的安全参数 > 启用 SQL 安全)
    • SetOption##class(%SYSTEM.SQL.Util).SetOption("SQLSecurity", "1")
    • Security.System.Modify: ##Class(Security.System).Modify(,.properties),其中,properties 为 properties("SQLSecurity")=1
  • 安全表(security table)现只能通过 Detail 和 List API 进行查询,即使在 SQL 安全处于禁用状态的情况下,也需要同时具有 %DB_IRISSYS:R%Admin_Secure:U 权限才能进行查询。

例如,要获取角色列表,无法再直接查询 Security.Roles 表, 而应使用 Security.Roles_List() 查询:

SELECT Name, Description FROM Security.Roles_List()

加密 IRISSECURITY

要加密 IRISSECURITY,请按以下步骤操作:

  1. 创建新的加密密钥。 转到 System Administration > Encryption > Create New Encryption Key File(系统管理 > 加密 > 创建新的加密密钥文件),并指定以下设置:
    • Key File(密钥文件)– 加密密钥的名称。
    • Administrator Name(管理员名称)– 管理员的名称。
    • Password(密码)– 密钥文件的密码。
  2. 激活加密密钥。 转到 System Administration > Encryption > Database Encryption(系统管理 > 加密 > 数据库加密),并选择 Activate Key(激活密钥),指定第 1 步中的 Key File(密钥文件)、Administrator Name(管理员名称)和 Password(密码)。
  3. 转到 System Administration > Encryption > Database Encryption(系统管理 > 加密 > 数据库加密),并选择 Configure Startup Settings(配置启动设置)。
  4. Key Activation at Startup(启动时的密钥激活)下拉菜单中选择一种密钥激活方法。 InterSystems 强烈建议选择 Interactive(交互式)密钥激活。
  5. Encrypt IRISSECURITY Database(加密 IRISSECURITY 数据库)下拉列表中,选择 Yes(是)。
  6. 重新启动系统,以加密 IRISSECURITY。

百分比类(那些类名以%开头的类,可以在任何命名空间访问)访问规则

之前版本的 InterSystems IRIS 中,管理 Web 应用程序对附加百分比类的访问权限的过程涉及到对安全global进行写入操作。 在 InterSystems IRIS 2025.2 中,可以通过管理门户或 ^SECURITY 例程完成此过程。

管理门户(Management Portal)

通过管理门户创建百分比类访问规则:

  1. 转到 System Administration > Security > Web Applications(系统管理 > 安全 > Web 应用程序)。
  2. 选择您的 Web 应用程序。
  3. Percent Class Access(百分比类访问)选项卡中设置以下选项:
    • Type(类型):控制该规则是仅适用于应用程序对指定百分比类的访问 (AllowClass),还是适用于包含指定前缀的所有类 (AllowPrefix)。
    • Class name(类名称):允许应用程序访问的百分比类或前缀。
    • Allow access(允许访问):是否允许应用程序访问指定的百分比类或软件包。
    • Add this same access to ALL applications(为所有应用程序添加相同的访问权限):是否为所有应用程序应用此规则。

^SECURITY

通过 ^SECURITY 例程创建类访问规则:

  1. 在 %SYS 命名空间中,运行 ^SECURITY 例程:
    DO ^SECURITY
  2. 选择选项 5, 1, 8, 和 1,以输入类访问规则提示。
  3. 按照提示指定以下内容:
    • Application?(应用程序?)– 应用程序名称。
    • Allow type?(允许类型?)– 该规则是适用于应用程序访问特定类 (AllowClass) 还是访问包含指定前缀的所有类 (AllowPrefix)。
    • Class or package name?(类或软件包名称?)– 允许应用程序访问的类或前缀。
    • Allow access?(允许访问?)– 是否允许应用程序访问指定类或软件包。
Discussão (0)0
Entre ou crie uma conta para continuar
Artigo
· Jul. 29 3min de leitura

Dynamic Templated Emails in InterSystems IRIS with templated_email


Sending emails is a common requirement in integration scenarios — whether for client reminders, automatic reports, or transaction confirmations. Static messages quickly become hard to maintain and personalize. This is where the templated_email module comes in, combining InterSystems IRIS Interoperability with the power of Jinja2 templates.

Why Jinja2 for Emails

Jinja2 is a popular templating engine from the Python ecosystem that enables fully dynamic content generation. It supports:

  • Variables — inject dynamic data from integration messages or external sources
  • Conditions (if/else) — change the content based on runtime data
  • Loops (for) — generate tables, lists of items, or repeatable sections
  • Filters and macros — format dates, numbers, and reuse template blocks

Example of a simple email body template:

 


Hello {{ user.name }}!

{% if orders %}
You have {{ orders|length }} new orders:
{% for o in orders %}
 - Order #{{ o.id }}: {{ o.amount }} USD
{% endfor %}
{% else %}
You have no new orders today.
{% endif %}
 

With this approach, your email content becomes dynamic, reusable, and easier to maintain.

Email Styling and Rendering Considerations

Different email clients (Gmail, Outlook, Apple Mail, and others) may render the same HTML in slightly different ways. To achieve a consistent appearance across platforms, it is recommended to:

  • Use inline CSS instead of relying on external stylesheets
  • Prefer table‑based layouts for the overall structure, as modern CSS features such as flexbox or grid may not be fully supported
  • Avoid script and complex CSS rules, as many email clients block or ignore them
  • Test emails in multiple clients and on mobile devices

Capabilities of the templated_email Module

The templated_email module is designed to simplify creating and sending dynamic, professional emails in InterSystems IRIS. Its key capabilities include:

  • render Jinja2 templates to generate dynamic email content
  • Flexible usage — can be used both from Interoperability productions and directly from ObjectScript code
  • Built‑in Business Operation — ready‑to‑use operation for production scenarios with SMTP integration
  • Automatic inline styling — converts CSS styles into inline attributes for better email client compatibility
  • Markdown support — allows creating clean, maintainable templates that are rendered to HTML before sending

These features make it easy to produce dynamic, well‑formatted emails that display consistently across clients.

Module templated_email

The module provides the following key components:

  • TemplatedEmail.BusinessOperation — a Business Operation to send templated emails via SMTP
  • TemplatedEmail.EmailRequest — an Interoperability Message for triggering email sends, with fields for templates, data, and recipients
  • TemplatedEmail.MailMessage — an extension of %Net.MailMessage that adds:
    • applyBodyTemplate() — renders and sets the email body using a Jinja2 + Markdown template
    • applySubjectTemplate() — renders and sets the email subject using a Jinja2 template

This allows you to replace %Net.MailMessage with TemplatedEmail.MailMessage in ObjectScript and gain dynamic templating:


set msg = ##class(TemplatedEmail.MailMessage).%New()
do msg.applySubjectTemplate(data,"New order from {{ customer.name }}")
do msg.applyBodyTemplate(data,,"order_template.tpl")

More details and usage examples can be found in the GitHub repository.

Templates Are Not Just for Emails

The template rendering methods can also be used for generating HTML reports, making it easy to reuse the same templating approach outside of email.

With templated_email, you can create dynamic, professional, and maintainable emails for InterSystems IRIS — while leveraging the full flexibility of Jinja2 templates.

Discussão (0)1
Entre ou crie uma conta para continuar
Anúncio
· Jul. 29

インターシステムズ 第23回 開発者向けウェビナー「RAG+生成AIであそぼう!」のご案内

 

いつもお世話になっております。

連続3回シリーズでお届けしている開発者向けウェビナー、最終回のテーマは「RAG+生成AIであそぼう!」です。

以下の日時で開催いたしますので、是非ご参加ください。

日時:9月9日(火)13時半~14時10分(40分間)

参加費無料・事前登録制

ご登録はこちらから

【概要】

生成AIにサンプルコードを依頼した時「よく見るとおかしいかも?」という経験をされた方も多いのではないでしょうか。また生成AIとのやりとりで、最初の質問には納得のいく答えが得られず「もっと良い回答をもらうにはどうすればいいか」と考えて質問を言い換えたり、前提情報を追加したりした経験もあるはずです。これは、AIに渡す情報の「質」と「量」が、出力結果の精度に直結することを示しています。 このような課題に対して有効なのが、RAG(検索拡張生成:Retrieval-Augmented Generation)というアプローチで、信頼できる情報源を AI に組み合わせることで、より正確で実用的な回答を得ることができるようになります。 本ウェビナーでは、RAGとは何か、その仕組みと利点、どのような場面で効果を発揮するのかを、開発者目線でわかりやすく解説します。

さらにInterSystems IRIS を活用して RAG を実装する方法を具体的なコードを交えながらご紹介し、生成 AI に高品質な回答をさせるための実践的な方法を解説します。

デモでは、ミートアップで一緒に作成していただく予定の RAG + 生成AI の Web API 実行例をご覧いただきます。さらにWeb API を生成 AI とアプリの接続に便利な MCP サーバとして公開し、Claude desktop から利用する例をご覧いただく予定です。

【こんな方にお勧め】

RAG、生成AIに興味があり、開発をしてみたい方

ご多用中とは存じますが、皆様のご参加をお待ち申し上げております。

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Jul. 28

Adding a Angular configuration page to the IRIS Management portal

With Intersystems indicating ZEN pages are being deprecated, I'm looking to find out how to add custom configuration pages for the management portal using the new method similar to the new Rules editor.

From what I can tell the new method uses rest pages using JWT Authentication, and has a mechanism to use the session cookie to generate the JWT token.

I've gotten the REST part done as per:

Creating a REST API with JWT Authentication in ObjectScript | InterSystems
 

The pages for the rules editor are using an obfuscated/minimised angular pages and include the following packages that handle the look, feel and authentication, but can't find these provided anywhere for use outside of InterSystems.

I'm checking if these are available anywhere. Or at least if anyone has the authentication/token handling that I could use within a custom config page.

The primary part that I couldn't follow completely was getting the token using the session cookie so I don't need an extra login for the custom config pages.

@intersystems/about-dialog
@intersystems/auth
@intersystems/column-view
@intersystems/confirmation-dialog
@intersystems/header
@intersystems/isc-form
@intersystems/notification
@intersystems/shared-utilities
@intersystems/styles
@intersystems/table
@intersystems/timeout

Discussão (0)4
Entre ou crie uma conta para continuar