在这篇文章中,我将解释如何通过使用CSP Web应用程序以及启用/禁用和认证/取消认证任何Web应用程序的代码来进行认证、授权和审计。
- 在线 Demo -- https://dappsecurity.demo.community.intersystems.com/csp/user/index.csp (SuperUser | SYS)
- 推荐大家看下这个视频: https://www.youtube.com/watch?v=qFRa3njqDcA
应用层
在这篇文章中,我将解释如何通过使用CSP Web应用程序以及启用/禁用和认证/取消认证任何Web应用程序的代码来进行认证、授权和审计。
应用层
注:IRIS有,Cache无。
^LOGDMN 例程允许管理结构化日志记录;还有一个基于类的 API,将在下一节中介绍。
要使用 ^LOGDMN 启用结构化日志记录:
set $namespace="%sys"
do ^LOGDMN
这将启动一个带有以下提示的例程:
1) Enable logging
2) Disable logging
3) Display configuration
4) Edit configuration
5) Set default configuration
6) Display logging status
7) Start logging
8) Stop logging
9) Restart logging
LOGDMN option?
4 以便可以指定配置详细信息。然后,该例程会提示输入以下项目:a. 最低日志级别,以下之一:
-2 — 详细的调试消息(例如十六进制转储)。-1 — 不太详细的调试消息。1(默认值)— 警告,表示可能需要注意但未中断操作的问题。2 — 严重错误,表明问题已中断操作。b. 管道命令,它指定系统将结构化日志发送到哪里。
IRIS 支持结构化日志记录。
创建多个日志,每个日志用于不同的目的。从以前的产品迁移过来的客户可以像过去一样利用这些日志,但现在还可以将所有日志信息导入一个单一的、中央的、机器可读的日志文件——结构化日志。然后可以将此文件与第三方分析工具一起使用。
本文概述了结构化日志中的信息,展示了日志示例,并描述了如何启用结构化日志记录。
当启用结构化日志记录时,系统会将相同的数据写入结构化日志,它也会写入其他日志(无论哪个)。例如,系统将相同的行写入messages.log 和结构化日志。
启用结构化日志记录后,结构化日志包含以下所有信息:
messages.log 的信息。这包括需要注意的警报、有关系统启动和关闭的信息、有关日志文件和 WIJ 文件的高级信息、有关配置更改 (CPF) 的信息以及与许可相关的信息。本部分显示结构化日志记录实用程序的示例输出,用于名称/值对格式和 JSON 格式。
以下输出使用格式选项 (名称/值对)。此示例经过编辑以用于显示目的;在实际输出中,每个条目只占一行,条目之间没有空行。
when="2019-08-01 18:43:02.216" pid=8240 level=SEVERE event=Utility.Event
text="Previous system shutdown was abnormal, system forced down or crashed"
when="2019-08-01 18:43:05.290" pid=8240 level=SEVERE event=Utility.Event
text="LMF Error: No valid license key. Local key file not found and LicenseID not defined."
when="2019-08-01 18:43:05.493" pid=8240 level=WARNING event=Generic.Event
text="Warning: Alternate and primary journal directories are the same"
when="2019-08-01 18:46:10.493" pid=11948 level=WARNING event=System.Monitor
text="CPUusage Warning: CPUusage = 79 ( Warnvalue is 75)."
要创建一个存储为整数的新位串,请对每个位求和 2 的幂:
set bitint = (2**2) + (2**5) + (2**10)
write bitint
1060
要将现有位串中的位设置为 1,请使用 $zboolean 函数(逻辑 OR)的选项7 :
set bitint = $zboolean(bitint, 2**4, 7)
write bitint
1076
要将现有位串中的位设置为 ,请使用 函数的选项 :
set bitint = $zboolean(bitint, 2**4, 2)
write bitint
1060
要在现有位串中切换位,请使用 函数(逻辑 )的选项 :
要将位字符串显示为整数,可以使用如下方法,该方法循环位并使用 函数:
此方法使用函数将位字符串中的哪些位设置为整数,该函数返回以10为底的对数值。该方法删除越来越小的位串块,直到没有剩余:
使用 函数对存储为整数的位串执行按位逻辑运算。
对于此示例,假设有两个位串 和 ,存储为整数,以及一个 方法,如 中定义的,用于显示这些位。
使用 函数的选项 对位执行逻辑 :
使用 函数的选项 对位执行逻辑与:
嗨,开发者们!欢迎加入第二届InterSystems技术写作大赛!
6月20日至七月20日 延长至7月31日,在社区撰写一篇利用InterSystems技术使用Python的文章,主题自定。
🎁 撰文即得奖 我们为每一位参与此次写作大赛的作者准备了一份特殊礼品!
🏆 优秀文章大奖 AirPods Max; Apple Watch SE; Apple HomePod mini / Apple Pencil
InterSystems许可证是指InterSystems发放的电子或纸质版的产品许可证,内容包括许可证订购日期、产品描述等。
激活码/License Key是InterSystems随许可证发放的许可软件激活码。通常情况下,客户收到的是电子许可证。
以下是一些许可证,激活码/License key常见咨询问题参考:
纸质版许可证或是安装介质盘,可通过合作伙伴或是致电原厂核验许可证信息后获取。
申请准备:
WRC全球响应中心联络信息:
要创建新的位串,请使用 $bit 函数将所需位设置为 1:
kill bitstring
set $bit(bitstring, 3) = 1
set $bit(bitstring, 6) = 1
set $bit(bitstring, 11) = 1
使用 将现有位串中的位设置为 1:
set $bit(bitstring, 5) = 1
使用 将现有位串中的位设置为 0:
set $bit(bitstring, 5) = 0
由于位串中的第一位是位 ,因此尝试设置位 会返回错误:
要测试是否在现有位串中设置了位,还可以使用 函数:
如果测试未明确设置的位,则 $bit 返回 0:
要显示位串中的位,请使用 $bitcount 函数获取位串中位的计数,然后遍历位:
还可以使用 来计算位串中 或 的数量:
要查找在位串中设置了哪些位,请使用 函数,该函数返回指定值的下一位的位置,从位串中的给定位置开始:
此方法搜索字符串并在 返回 时退出,表示没有找到更多匹配项。
在测试位串的比较时要非常小心。
例如,可以有两个位串 和 ,它们具有相同的位集:
然而,如果你比较它们,你会发现它们实际上并不相等:
如果你使用 ,你可以看到这两个比特环的内部表示是不同的:
在这种情况下, 将第 位设置为 :
Hi 社区,
这是海外工程师做的一个纯浏览器的代码编辑器CloudStudio. 欢迎大家下载试用:
GitHub 下载:
https://github.com/SeanConnelly/CloudStudio
InterSystems 应用市场下载:https://openexchange.intersystems.com/package/CloudStudio
到Discord 讨论区:https://discord.gg/ZnvdMywsjP
Docker 支持与在线Demo:
已安装 git 和 Docker desktop .
Clone/git 把 repo 导入任何本地目录
git https://github.com/rcemper/Dataset-OEX-reviews.git
启动IRIS容器:
docker-compose up -d --build
http://localhost:42773/cloudstudio/CloudStudio.Index.cls
Demo 视频:https://www.youtube.com/watch?v=Am6QAvrPPPg
如果要将一系列布尔参数传递给方法,一种常见的方法是将它们作为编码为单个整数的位序列传递。
例如,Security.System.ExportAll() 方法用于从 IRIS 实例中导出安全设置。如果查看此方法的类引用,将看到它的定义如下:
classmethod ExportAll(FileName As %String = "SecurityExport.xml",
ByRef NumExported As %String, Flags As %Integer = -1) as %Status
第三个参数 Flags 是一个整数,其中每个位代表一种可以导出的安全记录。
如果您使用InterSystems技术开发了自己的网络应用,现在想在客户端进行验证码验证,以确定用户真实性使其更加安全。有一些现代框架可以解决验证码的问题,然而它们中的大多数需要互联网接入来生成代码,有时实施起来很复杂。考虑到图像识别已经非常成熟,您可以参考本文为基本例子。这就是为什么现在倾向于看到更多的模式识别验证码而不是单纯的阅读验证码。(例如,点击所有有店面的图片)。如果你需要更复杂的东西,请继续开发,改进这个代码并分享它。 继续阅读以了解如何使用这个基本的例子:
Demo.Captcha class
使用这个类,你可以在一个物理目录上创建验证码图像文件,以便在你的应用程序上显示。请注意,创建图像的目录必须是可用的,以便你的Web应用程序访问这些图像。要创建验证码图像,请调用以下方法,将完整的文件名作为一个参数:
创建 image 文件
InterSystems正在招聘Market Development Representative欢迎您的自荐、推荐。
InterSystems正在招聘Technical Specialist(Implementation),欢迎您的自荐、推荐。
InterSystems正在招聘Technical Specialist(Product Support),欢迎您的自荐、推荐。
我们正在招聘Support Facilitator,欢迎您的自荐、推荐。
有时可能希望在基于数据平台的应用程序中存储一系列相关的布尔值。可以创建许多布尔变量,也可以将它们存储在数组或列表中。或者可以使用称为“位串”的概念,它可以定义为位序列,首先呈现最低有效位。位串允许您以非常有效的方式存储此类数据,无论是在存储空间还是处理速度方面。
位串可以以两种方式之一存储,作为压缩字符串或整数。如果在没有上下文的情况下听到术语“位串”,则表示位序列存储为压缩字符串。本文向介绍了这两种类型的位串,然后介绍了一些可用于操作它们的技术。
存储位序列的最常见方式是在位串中,这是一种特殊的压缩字符串。除了节省存储空间外,还可以使用 ObjectScript 系统函数有效地操作位串。
这样的系统函数是 $factor,它将整数转换为位串。我们可以通过执行以下语句将整数 11744 转换为位串:
set bitstring = $factor(11744)
要查看位串内容的表示,可以使用 命令:
zwrite bitstring
bitstring=$zwc(128,4)_$c(224,45,0,0)/*$bit(6..9,11,12,14)*/
起初它看起来很神秘,但在输出的末尾,会看到一条注释,其中显示了已设置的实际位的列表:6、7、、、、 和 。位串中的位 表示 ,位 表示 ,依此类推。将所有位加在一起,我们得到 。
为了将自动故障转移扩展到尽可能广泛的故障情况,InterSystems建议你为每个镜像配置一个仲裁机。
要充当仲裁者,系统必须有一个正在运行的ISCAgent进程。由于ISCAgent是与InterSystems IRIS一起安装的,任何承载一个或多个InterSystems IRIS实例的系统都符合这一要求,可以被配置为仲裁者而无需进一步准备;但是,承载一个或多个故障转移或DR异步镜像成员的系统不应该被配置为该镜像的仲裁者。
没有托管InterSystems IRIS实例的系统可以通过安装Arbiter方式的作为仲裁者。请从InterSystems公司下载适合你的仲裁者系统平台的ISCAgent安装包,然后,安装ISCAgent。
注意:Arbiter的版本要和InterSystems IRIS安装版本保持一致。
在Windows系统上,只需执行安装文件,例如ISCAgent-2020.1.0.540.0-win_x64.exe。
[root@arbiterhost home]# gunzip ISCAgent-2020.1.0.540.0-lnxrhx64.tar.gz
[root@arbiterhost home]# tar -xf ISCAgent-2020.1.0.540.0-lnxrhx64.tar
[root@arbiterhost home]# ./ISCAgent/agentinstall增量锁定具有潜在危险,因为它可能导致称为死锁的情况。当两个进程各自对已被另一个进程锁定的变量断言增量锁定时,就会出现这种情况。因为尝试的锁是增量的,所以现有的锁不会被释放。结果,每个进程在等待另一个进程释放现有锁的同时挂起。
举个例子:
A 发出此命令:lock + ^MyGlobal(15)B 发出此命令:A 发出此命令:此 LOCK 命令不返回;进程被阻塞,直到进程 释放这个锁。
B 发出此命令:lock + ^MyGlobal(15)此 LOCK 命令不返回;进程被阻塞,直到进程 释放这个锁。但是,进程 A 被阻塞,无法释放锁。现在这些进程都在等待对方。
有几种方法可以防止死锁:
timeout 参数。如果发生死锁,可以使用管理门户或
本节介绍在实践中使用锁的基本方法。
使用升级锁来管理大量锁。当锁定数组的节点时,它们是相关的,特别是当将多个节点锁定在同一下标级别时。
当给定进程在同一数组中的给定下标级别创建了超过特定数量(默认为 1000)的升级锁时, 将删除所有单独的锁名称并用新锁替换它们。新锁位于父级,这意味着数组的整个分支被隐式锁定。示例(如下所示)演示了这一点。
应用程序应在合适的情况下尽快释放特定子节点的锁(与非升级锁完全相同)。当释放锁时, 会减少相应的锁计数。当的应用程序移除足够多的锁时,会移除父节点上的锁。第二小节显示了一个示例。
假设有 1000 个^MyGlobal("sales","EU",salesdate) 形式的锁,其中 salesdate 表示日期。锁表可能如下所示:
注意 Owner 19776 的条目(这是拥有锁的进程)。 ModeCount 列指示这些是共享的、升级的锁。
当同一进程试图创建另一个相同形式的锁时, 会升级它们。它会移除这些锁并用名称为 ^MyGlobal("sales","EU") 的单个锁替换它们。现在锁表可能如下所示:
列表明这是一个共享的升级锁,它的计数是 1001。
请注意以下关键点:
^MyGlobal("sales","EU") 的所有子节点现在都被隐式锁定,遵循数组锁定的基本规则。如上所述,如果您将 timeout 指定为 0, 会添加锁。但是,如果使用零超时锁定父节点,并且已经在子节点上锁定,则忽略零超时并使用内部 1 秒超时。
要删除默认类型的锁,请使用 命令,如下所示:
LOCK -lockname
如果执行此命令的进程拥有具有给定名称的锁(默认类型),则此命令将删除该锁。或者,如果进程拥有多个锁(默认类型),此命令将删除其中一个。
或者删除另一种类型的锁:
LOCK -lockname#locktype
其中 是一串锁类型代码。
LOCK 命令的其他基本变体为了完整起见,本节讨论 LOCK 命令的其他基本变体:使用它来创建简单的锁并使用它来删除所有锁。这些变化在实践中并不常见。
对于 命令,如果省略 + 运算符, 命令首先会删除该进程持有的所有现有锁,然后尝试添加新锁。在这种情况下,锁称为简单锁而不是增量锁。一个进程可以拥有多个简单的锁,如果该进程使用如下语法同时创建它们:
LOCK (^MyVar1,^MyVar2,^MyVar3)
简单的锁在实践中并不常见,因为通常需要持有多个锁并在代码的不同步骤中获取它们。因此使用增量锁更实用。
但是,如果简单锁适合,请注意,可以在创建简单锁时指定 和 参数。此外,要删除一个简单的锁,可以使用带有减号 () 的 LOCK 命令。
任何多进程系统的一个重要特征是并发控制,即防止不同进程同时更改特定数据元素的能力,从而导致损坏。 提供了一个锁管理系统。本文提供了一个概述。
此外,%Persistent 类提供了一种控制对象并发访问的方法,即 %OpenId() 的并发参数和该类的其他方法。这些方法最终使用本文讨论的 ObjectScript LOCK 命令。所有持久对象都继承这些方法。同样,系统会自动对 、 和 操作执行锁定(除非指定 关键字)。
类还提供方法 、%ReleaseLock()、、、 和 。
基本的锁定机制是 命令。此命令的目的是延迟一个进程中的活动,直到另一个进程发出可以继续进行的信号。
锁本身并不能阻止活动行为。锁定仅按约定起作用:它要求相互竞争的进程都使用相同的锁定名称实现锁定。例如,下面描述了一个常见的场景:
A 发出 LOCK 命令, 创建一个锁(默认情况下,一个独占锁)。通常,进程 然后对中的节点进行更改。详细信息是特定于应用程序的。B 暂停。具体来说, 命令不返回,并且不能执行连续的代码行。命令的参数之一是锁名称。
Hi 开发者们,
你或许已经知道了,今年InterSystems全球峰会线下会议再次开启!我们非常期待能在现场见到诸位!
然而,并不是所有的开发者社区成员都有机会参加(我也是!)所以我们决定制作一个很酷的视频收集来自社区成员们问候🎥
无论身在何方,让我们一同以虚拟方式来参加这次伟大的盛会吧!🌏
⬆️要求:您录制一句2-3秒的短视频,视频内容是向我们的社区成员说 “Hi From your country (来自XX的问候,英语视频最佳)”,然后将视频上传至 这里 ,这样,我们可以把来自各地的许多视频剪辑在一起,在2022年全球峰会上展示。您也可以通过开发者社区联系我,将视频直接分享给我。
期待见到你!
问:
我有一个专有的JSON,需要转换为SDA并保存到一个SDA文件。
如何将json转化为SDA并写入文件?
谢谢
系统提供的变量。
$HOROLOG
$JOB
$NAMESPACE
$TLEVEL
$USERNAME
$ZHOROLOG
$ZJOB
$ZPI
$ZTIMESTAMP
$ZTIMEZONE
$ZVERSION
SQL直接支持许多对象脚本特殊变量。这些变量包含系统提供的值。只要可以在SQL中指定文字值,就可以使用它们。
SQL特殊变量名不区分大小写。大多数可以使用缩写来指定。
在找 HealthShare Patient Index 的相关视频和资料,求分享,谢谢
这篇文章是上一篇文章的延续https://cn.community.intersystems.com/post/首次使用intersystems-iris-互操作性-一个production是什么?
在上一篇文章:https://cn.community.intersystems.com/post/首次使用intersystems-iris-互操作性-一个production是什么? 我们查验了什么是Production. 我们运行了示例代码,并在Visual Trace 页面查验了如何将流动消息的内容引入进Production中。
本文将回顾消息messages的概念和定义,和消息如何在系统集成所需的开发内容中用于组件之间发送和接收数据。
在创建 一个Message消息之前,让我们回顾一个案例研究。
IRIS® 数据平台提供了用于登录数据库和开始使用的默认用户名和密码。默认用户名为“_SYSTEM”(大写),密码为“sys”。
执行大多数 SQL操作都会发出SQLCODE值。发出的值为0、和负整数值。
SQLCODE=0表示SQL操作成功完成。对于SELECT语句,这通常意味着从表中成功检索数据。但是,如果SELECT执行聚合操作(例如:),则聚合操作成功,即使中没有数据,也会发出;在这种情况下,返回,。字段约束指定管理字段允许的数据值的规则。一个字段可能有以下约束:
DEFAULT这是一个在InterSystems IRIS中用python和objectscript建立的对比测试。
测试目的是比较在python和objectscript中从BP到BO来回发送一千条请求/消息的速度。
更多信息,请访问 https://github.com/LucasEnard/benchmark-python-objectscript。
重要提示 : 这里用的是python, graph objectscipt和objectscript从一个BP到一个BO来回发送1000条消息的时间,单位是秒。
字符串信息是由十个字符串变量组成。
对象信息由十个对象变量组成,每个对象都是它自己的int、float、str和List(str)。
| 消息字符串 | 1000条消息来回的时间 (秒) |
|---|---|
| Python BP | 1.8 |
| BPL | 1.8 |
| ObjectScript | 1.4 |
| 消息对象 | 1000条消息来回的时间 (秒) |
|---|---|
| Python BP | 3.2 |
| BPL | 2.1 |
| ObjectScript | 1.8 |
行中函数的时间是列中函数的x倍 :
| 消息字符串 | Python | BPL | ObjectScript |
|---|---|---|---|
| Python | 1 | 1 | 1.3 |
| BPL | 1 | 1 | 1.3 |
| ObjectScript | 0.76 | 0. |
孕产妇风险可以通过一些医学界众所周知的参数来测量。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Yasir Hussein Shakir发布了一个非常有用的数据集,用于训练检测/预测孕产妇风险的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是 https://www.kaggle.com/code/yasserhessein/classification-maternal-healt….
由于缺乏怀孕期间和怀孕后的孕产妇保健信息,许多孕妇死于怀孕问题。这在农村地区和新兴国家的中下层家庭中更为常见。在怀孕期间,应时刻注意观察,以确保婴儿的正常成长和安全分娩 (来源: https://www.kaggle.com/code/yasserhessein/classification-maternal-healt…).
数据是通过基于物联网的风险监测系统,从不同的医院、社区诊所、孕产妇保健机构收集而来。
肾脏疾病可以从一些医学界熟知的参数中发现。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Akshay Singh发表了一个非常有用的数据集,用于训练肾脏疾病检测/预测方面的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset。
该肾脏疾病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset):