增强InterSystems IRIS DBMS的安全性

当您首次使用InterSystems IRIS时,通常只需安装最低安全级别的系统。您输入密码的次数会比较少,这样有利于快速了解和操作开发服务和Web应用程序。而且,最低的安全性有时更便于部署开发项目或解决方案。

然而,有时需要将项目移出开发环境,迁移到一个可能很不友好的互联网环境中。在部署到生产环境之前,需要使用最大的安全设置(即,完全锁定)对其进行测试。这就是我们在本文中将要讨论的内容。

如果想更全面地了解InterSystems Caché、Ensemble和IRIS中的DBMS安全性问题,请阅读我的另一篇文章《在生产环境中安装InterSystems Caché DBMS的相关建议》。

InterSystems IRIS中安全系统的设计概念是针对不同的类别(用户、角色、服务、资源、特权和应用程序)应用不同的安全设置。

image

可以为用户分配角色。用户和角色可以对资源(数据库、服务和应用程序)拥有不同的读、写和使用权限。用户和角色还可以对数据库中的SQL表拥有SQL权限。

安全级别的差异

用户在安装InterSystems IRIS时,可以为其选择安全级别:最小、正常或锁定。这些级别在用户参与程度、可用角色和服务,以及服务和应用程序的身份验证方法的配置方面存在差异。如需了解更多信息,请阅读《InterSystems IRIS安装准备》指南中的《InterSystems安全性准备》章节。

在文档中,您可以找到下面这些表格,其中显示了每个级别的安全设置。这些安全设置可以在系统管理门户界面进行更改。

初始用户安全设置

Security SettingMinimalNormalLocked Down
Password Pattern3.32ANP3.32ANP8.32ANP
Inactive Limit090 days90 days
Enable _SYSTEM UserYesYesNo
Roles assigned to UnknownUser%AllNoneNone

初始服务属性设置

Service PropertyMinimalNormalLocked Down
Use Permission is PublicYesYesNo
Requires AuthenticationNoYesYes
Enabled ServicesMostSomeFewest

初始服务启用设置

ServiceMinimalNormalLocked Down
%Service_BindingsEnabledEnabledDisabled
*%Service_CSPEnabledEnabledEnabled
%Service_CacheDirectEnabledDisabledDisabled
%Service_CallInEnabledDisabledDisabled
%Service_ComPortDisabledDisabledDisabled
%Service_ConsoleEnabledEnabledEnabled
%Service_ECPDisabledDisabledDisabled
%Service_MSMActivateDisabledDisabledDisabled
%Service_MonitorDisabledDisabledDisabled
%Service_ShadowDisabledDisabledDisabled
%Service_TelnetDisabledDisabledDisabled
%Service_TerminalEnabledEnabledEnabled
%Service_WebLinkDisabledDisabledDisabled

*InterSystems IRIS环境下,%Service_CSP应用%Service_WebGateway。
不同的操作系统所使用的服务略有不同。

如何提高安全性

您需要为每个启用的服务选择合适的身份验证方法,包括:无认证(unauthenticated)、密码、Kerberos或授权。

您还需要禁用系统中未使用的web应用程序。对已启用的web应用程序选择正确的身份验证方法:认证、密码、Kerberos、授权、登录或cookie。

当然,管理员可以为每一个项目和解决方案选择安全设置,以满足客户的项目要求。整个过程应始终保持一种平衡,即,一方面要保证系统足够方便以支持用户完成实际工作,另一方面又要保证系统足够安全能够阻止入侵者。不过众所周知,被禁用的系统才是最安全的系统。

如果遇到需要多次手动提高系统安全级别的情况,这就是一个明确的迹象,表明需要编写一个软件模块来解决这些问题。

实际上,InterSystems Open Exchange提供了一个锁定(LockDown)程序,可以帮助您提高安全性。该程序的源代码可以在InterSystems isc-apptools-lockdown页面的存储库中找到。

LockDown程序有以下几种作用:

首先,更改以下预安装用户的密码:

  • Admin,
  • CSPSystem,
  • IAM,
  • SuperUser,
  • UnknownUser,
  • _Ensemble,
  • _SYSTEM.

其次,禁用除以下服务之外的所有服务:

  • %%service_web gateway
  • %service_console
  • %service_login
  • %service_terminal

再次,为所有web应用程序设置密码保护,包括:

  • /csp/ensdemo
  • /csp/samples
  • /csp/user
  • /isc/studio/usertemplates
  • /csp/docbook
  • /csp/documatic
  • /isc/studio/rules
  • /isc/studio/templates

最后,设置系统范围内的安全参数,包括:

  • 密码复杂度为 "8.32 ANP"
  • 限制90天内不活跃的用户
  • 开启审计和其他所有安全相关的事件

您可以从GitHub下载LockDown.cls,在系统上安装好LockDown程序。然后在终端输入以下内容:

USER>zn “%SYS”
%SYS>do $system.OBJ.Load("/home/irisusr/LockDown.cls","ck")

或者可以使用以下命令从公共注册中心通过ZPM批处理管理器进行安装:

USER>zn “%SYS”
%SYS> zpm “install isc-apptools-lockdown”

执行LockDown程序

强烈建议在执行LockDown程序之前先进行备份。

必须从%SYS命名空间执行LockDown程序。如果您不想更改所有预安装用户的密码,请将第一个参数保留为空。

如果希望保留使用IRIS Studio、Atelier或VSCode编辑程序和类的能力,请不要禁用%Service_Bindings服务,只需将bindings参数设置为1即可。下面是一个示例:do ##class(App.Security.LockDown).Apply("New Password 123",.msg,1)
此模块还包含一个功能,该功能在系统密码被盗用、需要替换所有预装帐户但无需执行锁定的情况下很有用。可以参考下面的运行:do ##class(App.Security.LockDown).Change Password("New Password 123", "Admin,CSPSystem,IAM,SuperUser,Unknown User, _Ensemble,_SYSTEM")
在执行锁定之后,应用程序或项目极有可能会停止工作。为了解决这个问题,需要将一些安全设置恢复到原始状态。这个操作可以通过管理门户界面(安全性部分)实现或以编程方式完成。

锁定后更改安全设置

锁定之后,如果您的web应用程序使用了密码以外的身份验证方法,就需要进行启用。

建议运行软件模块zpm-registry-test-deployment,它有一个在ZPM-registry项目中使用LockDown的示例。

在IRIS上以最低的安全级别安装该项目,安装结束时将开始运行其中的代码。代码可以用来:
- 更改所有预安装用户的密码。
- 禁用此项目中未使用的所有服务。
- 为系统上的所有应用程序启用密码保护,但Web应用程序/注册表(允许未经授权的用户获取注册表中的软件包列表)除外。
- 创建一个拥有在注册表中发布新包特权的新用户。该用户必须对IRISAPP数据库中的项目表具有写权限。

创建一个新用户:

set tSC= ##class(App.Security.LockDown).CreateUser(pUsername, "%DB_"_Namespace, pPassword, "ZMP registry user",Namespace)
If $$$ISERR(tSC) quit tSC
write !,"Create user "_pUsername

为新的未授权用户添加权限:

set tSC=##class(App.Security.LockDown).addSQLPrivilege(Namespace, "1,ZPM.Package", "s", "UnknownUser")
set tSC=##class(App.Security.LockDown).addSQLPrivilege(Namespace, "1,ZPM.Package", "s", pUsername)
set tSC=##class(App.Security.LockDown).addSQLPrivilege(Namespace, "1,ZPM.Package_dependencies", "s", pUsername)
set tSC=##class(App.Security.LockDown).addSQLPrivilege(Namespace, "1,ZPM_Analytics.Event", "s", pUsername)
set tSC=##class(App.Security.LockDown).addSQLPrivilege(Namespace, "9,ZPM.Package_Extent", "e", pUsername)
set tSC=##class(App.Security.LockDown).addSQLPrivilege(Namespace, "9,ZPM_Analytics.Event_Extent", "e", pUsername)
If $$$ISERR(tSC) quit tSC
write  !,"Add privileges "

运行LockDown项目:

set tSC= ##class(App.Security.LockDown).Apply(NewPassSys)
If $$$ISERR(tSC) quit tSC

Change the settings for the web app so that an unknown user can log in:
set prop("AutheEnabled")=96
set tSC=##class(Security.Applications).Modify("/registry",.prop)
If $$$ISERR(tSC) quit tSC
write !,"Modify /registry "

Change the settings for the %service_terminal service, changing the authorization method to Operating System, Password:
set name="%service_terminal"
set prop("Enabled")=1
set prop("AutheEnabled")=48 ; Operating System,Password
set tSC=##class(Security.Services).Modify(name,.prop)
If $$$ISERR(tSC) quit tSC
write !,"Modify service terminal"

总结

在本文中,我讨论了为何要提高系统安全性级别的原因,并且通过一个InterSystems LockDown程序运行示例,演示了如何通过编程的方式提升安全性。

在本文所介绍的方法中,我们首先关闭了系统中的所有内容(即,设置最大安全级别)。然后通过开放项目运行所需的服务和应用程序(但仅限于这些)来控制安全性。我相信还有许多其他的方法和最佳实践,欢迎大家在文章评论区留言告诉我们。

相关推荐

参赛通道开启!欢迎参加InterSystems编程大奖赛

继2月1日,InterSystems多模型数据库竞赛优胜者决出后,又一场赛事正式启动!2月8日InterSystems编程大奖赛正式开启 奖项设置 此次大奖赛时间为2021年2月8日-3月8日,我们提升了现金奖励力度,奖金总额高达16000美元!除内部员工外,任何开发者社区的成员均可参加。新用户扫码建账号此次竞赛设置两类奖项:专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出第一名,奖金6,000美元第二名,奖金3,000美元第三

InterSystems的博客 743

InterSystems开发者社区中文版第二届技术征文大赛正式启动!

InterSystems开发者社区中文版第二届技术征文大赛正式启动!时间从2023年9月19日至2023年10月24日,欢迎参加!

InterSystems的博客 373

为社区成员提供的全新在线分析仪表板(Analytics Dashboard)!

开发者们大家好!我们非常激动地与您分享我们为每个社区成员提供的在线分析仪表板(Online Analytics Dashboard)这一全新的强大功能????从现在开始,您可以看到您自己的当周、月和所有时间的详细统计数据,包括:浏览量,点赞量,评论量,关注量时间轴图——针对浏览量、点赞、关于您的帖子的行动、评论包含关于您的每个帖子的浏览量、评论和点赞信息的表此外,现在您可以很容易地看到您...

InterSystems的博客 543

荣誉!InterSystems被独立研究机构Forrester评为“事务分析型数据平台领导者”

2022 年 12 月 1 日,中国,北京——致力于帮助客户解决最关键的可扩展性、互操作性和速度问题的创新数据技术提供商InterSystems今天宣布,在Forrester日前公布的《The Forrester Wave™:事务分析型数据平台(2022年第4季度)》报告中,InterSystems IRIS® 数据平台被评为领导者。2022 年 12 月 1 日,中国,北京——致力于帮助...

InterSystems的博客 562

ZPM介绍(3)

建立私服(Porxy-Registry)这张图解释了您的私服是怎么工作的, 整篇文章在这里: Proxy-Registry搭建私服您需要有一台自己的的服务器, 在上面安装IRIS, zpm, 然后用zpm去下载另一个软件包“zpm-registry"。象这样zpm:DEMO>search -r zpm-registryregistry https://pm.community....

InterSystems的博客 966

ObjectScript的命名规范

命名规范,英文叫"name convention", 是对写代码取名字的一些”共识“。也就是说, 你可以不遵守,但大家都选择了遵守,照者一个规范来。为什么呢?因为有社区,大家要共享代码, 你不照着规矩来, 别人会鄙视你, 懒的用你的代码。ObjectScript以前没什么社区,大家各写各的, 使用ObjectScript的大公司也没谁把自己的代码拿出来共享。因此,个人开发者基本就是参考官方In...

InterSystems的博客 440

ZPM介绍(2)

发布您自己的软件首先:要发布您的软件,您要支持这个”命名规范。其中和zmp最相关的是包名和l类名的设计,你要定义成这样:company.project.subpackage.TheClass.cls如果您的Package Name定义是: Company.Project, 有大写字母,对不起,是无法用zpm打包的。这个链接给了最简单的例子,但还不详细,我来总结一下:发布您的软件前,有几...

InterSystems的博客 890

创意社区新闻摘要 | InterSystems Ideas News!

Hi 开发者社区的成员们,大家好!欢迎关注我们第一期InterSystems Ideas News!最重要的消息是我们第一次非常成功的创意马拉松。我们收到了75个有趣的新想法。以下是创意社区(Ideas Portal)一些数据:✓ 上月,我们收到了42条新创意✓ 上月,我们迎来了147位新用户✓ 迄今为止,我们共收到142 条新创意✓ 迄今为止,共有 273 位用户加入我们以下...

InterSystems的博客 356

ZPM介绍(1)

ZPM介绍有Developer听闻了InterSystems的包管理器ZPM, 希望我能介绍一下。正好刚刚看到一个开发者论坛的新闻: Open Exchange ZPM is now InterSystems Package Manager , 觉得更有必要了。zpm是什么简单说:zpm, 全称InterSystems ObjectScript Package Manager, 是一个包管...

InterSystems的博客 2251

欢迎第500名社区会员!

Hi!大家好!我们迎来了第500名开发者社区会员!欢迎@Min Lu!请关注站内私信,领取你的幸运礼品哟(^U^)ノ~YO

InterSystems的博客 354

InterSystems开发者关系主管Dean:集成FHIR,改变游戏规则

作为开发者社区的一员,多年来我亲眼目睹了访问和共享数据的障碍是如何阻碍创新的。在与医疗科技领域的初创公司和大企业合作时,我看到了封闭的数据是如何阻碍了我们的合作,那种我们都意识到的对提供高质量医疗服务至关重要的合作。随着我对FHIR®(快速医疗互操作性资源)标准的了解,我开始相信这是医疗创新的前进之路。我希望全世界的开发人员——包括我们全球InterSystems开发社区的1.1万余名开发人员...

InterSystems的博客 1030

广而告之!寻找第500名InterSystems开发者社区(中文版)会员!

Hi!大家好!截至11月3日中午,我们的开发者社区会员共495人!我们准备了一份惊喜礼品,准备送给第500名开发者社区会员!那么,谁是第500名幸运的开发者社区成员呢?我们拭目以待!(*^▽^*)...

InterSystems的博客 371

礼品全部寄出,大赛落下帷幕!一起期待下一次InterSystems开发者社区精彩活动!...

各位开发者社区的同学们,大家好!在各位社区同学的大力支持下,我们的“首届技术征文大赛”圆满完赛!在过去一周多的时间里,我们整理了各类奖项及礼品,目前已经全部寄出!最新寄出的是开发者征文大赛获奖者的奖品,请以下同学留意查收,如未收到快递信息,请及时与我们联系:@Zhe Wang@姚 鑫@聆严 周@John Pan@he hf@sun yao@Meng Cao@lizw ...

InterSystems的博客 354

【动画视频】要想运维功夫硬,日常应该怎么做?

构建系统夯基础,日常运维是保障。运维工作杂又细,业务连续是关键。等保评级都看它,日常练兵保安全。日常运维很重要,想要干好不容易。要想运维功夫硬,日常应该怎么做?...

InterSystems的博客 362

【动画视频】医院需要什么样的互联互通平台?

医院管理者、信息中心、业务骨干,每个角色都有独特的业务诉求,InterSystems IRIS医疗版互联互通套件专为国内用户设计,截至2021年,InterSystems技术已助力一百余家医院通过四级及以上医院信息互联互通标准化成熟度评级,其中,五乙用户占全国30%以上。...

InterSystems的博客 400

【重要】恭喜1024活动中奖者!请获奖者及时提交信息,以便我们及时与您沟通奖品领取...

各位开发者社区的同学们,大家好!10月24日晚,我们成功举办了“首届技术征文大赛线上分享会”,我们在这次活动中邀请了多位征文大赛的参赛同学分享技术心得,同期举办了多轮抽奖,以下是各个奖品的获奖名单,我们恭喜这些获奖者,同时提醒获奖者请务必通过二维码登记奖品领取信息(如已登记请忽视)。各类奖品将于近日陆续寄出,感谢大家对社区活动的支持与积极参与!期待下一个1024!...

InterSystems的博客 430

获奖名单公布!一起来关注InterSystems开发者社区中文版首届技术征文大赛

各位开发者社区的同学们,大家好!我们的????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自20名参赛者的30篇参赛文章,感谢大家的积极参与!????????(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自20名参赛者的30篇参赛文章,感谢大家的积极参与!以下是获奖名单!1. 专家提名奖:活动期间发...

InterSystems的博客 428

Happy 1024!欢迎参加“首届技术征文大赛线上分享会”

开发者社区的同学们,1024快乐!今晚19:30,我们将通过“InterSystems首届技术征文大赛线上分享会”发布获奖名单、进行征文作品分享&点评、探讨热门话题,同期还将举办多轮抽奖!欢迎参会,锁定#腾讯会议会议主题:InterSystems首届技术征文大赛线上分享会会议时间:2022/10/24 19:30-21:00 (GMT+08:00) 中国标准时间 - 北京点击链接...

InterSystems的博客 419

12小时后投票截止!获奖名单将于10月24日晚发布(附腾讯会议邀请)

各位开发者社区的同学们,大家好!经过一个多月的赛期,我们举办的????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)即将步入尾声!????????(←点击链接进入参赛页面,浏览所有参赛文章)即将步入尾声!InterSystems开发者社区(中文版)首届技术征文大赛的“征文&投票”环节将于12小时后结束(截至10月23日24:00)!抓住最后的时间...

InterSystems的博客 434

【最新排名(按点赞)】投票倒计时三天:继续为你喜欢的征文作品投票吧!...

2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是优秀作品获得“开发者社区奖”的关键!我们先来看看目前作品排名情况吧!距离投票截止还有三天(截止至10月23日),我们暂时无法获得专家评审分数,以下根据作品“点赞”进行排名(排名截至10月21日...

InterSystems的博客 375

【目前点赞排名】投票倒计时五天:继续为你喜欢的征文作品投票吧!

2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是优秀作品获得“开发者社区奖”的关键!我们先来看看目前作品排名情况吧!距离投票截止还有五天(截止至10月23日),我们暂时无法获得专家评审分数,以下根据作品“点赞”进行排名。2022年9月5日-...

InterSystems的博客 296

技能帖:更好地利用开发者社区的发帖功能!

各位开发者社区的同学们,大家好!您想更好地获得帮助、讨论有趣的功能、发布公告或分享您的知识吗?在这篇文章中,我们将告诉你如何做到这一切。我们将通过以下几部分来分享“如何做”:一般发帖步骤问题文章或公告讨论一般发帖步骤一般发帖步骤首先,你需要点击开发者社区网站顶部菜单中的“发布新帖”按钮:之后,您将看到编辑器中显示创建一个问题、一则公告、一篇文章或一个讨论。不同类型的帖子有自己...

InterSystems的博客 577

四则优秀案例分享:医疗数据大规模集成

在美国各地,当需要实现大规模的应用集成时,医疗行业的领导者会使用InterSystems HealthShare Health Connect®。无论是为了连接电子病历,还是为了提升床边护理决策能力,无论是为了创新远程医疗和远程护理,还是为了业务增长,亦或是为未来做准备,InterSystems和Health Connect随时准备好帮助您和您的组织实现目标。我们在此提供几个InterSyste...

InterSystems的博客 1060

IRIS镜像状态监控

在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。尽管IRIS内部API提供了丰富的集群配置、成员状态等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用,但在IRIS上开...

InterSystems的博客 448

如何为你喜欢的征文投票?来帮助你喜欢的作者赢得“开发者社区奖”!

2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是作者获得“开发者社区奖”的关键!如何为你喜欢的作品投票呢?2022年9月5日-10月24日(北京时间),我们正在举办????????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你...

InterSystems的博客 194

首届InterSystems Idea创意马拉松

社区成员们,大家好!我们开心地宣布一种全新类型的比赛——寻找最聪明的创意比赛!欢迎了解:????InterSystems Idea 创意马拉松????在9月26日至10月16日期间提出一个与InterSystems产品和服务相关的想法,即可获得达成奖。最重要的是,此次赛事InterSystems的员工和社区成员都可以参与!>>点击提交你的想法吧!<<规则In...

InterSystems的博客 281

【腾讯会议邀请】InterSystems开发者社区中文版首届技术征文大赛线上见面会

亲爱的社区同学们!2022年9月5日-10月24日,我们正在举办InterSystems开发者社区中文版首届技术征文大赛!????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!????????(←点击链接进入参赛页面,浏览所有参赛文章)!2022年9月27日(下周二)11:00-11:30,我们将进行一次针对此次征文大赛的线上宣讲,欢迎您通过腾讯会议...

InterSystems的博客 190

InterSystems开发者社区中文版首届技术征文大赛专家评审团亮相!

中文社区的同学们大家好!如你所知,从2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!从2022年9月5日-10月24日(北京时间),我们正在举办????????(←点击链接进入参赛页面,浏览所有参赛文章)!截至目前,我们已收获了20余篇佳作作为此次大赛重要奖项“专家提名奖”评比的重要部分...

InterSystems的博客 169

Production 中调用 web service 组件时有关超时参数的设置

我在这里和大家分享下在 Interoperability 的接口开发中,调用Web Service接口的几个超时参数的设置经验。赶时间的同学可以直接拉到文章最下面看结论就好。1.实验过程首先我设计了一个Web service的服务器端,强制在接收到请求后 8s 返回结果。在客户端我设置了响应超时7s, 重试间隔5s, 故障超时23s,如图:在客户端、服务器端均设置了SOAP Lo...

InterSystems的博客 270

轻而易举!来InterSystems Ideas为你的想法分类吧!

开发者社区的同学们,大家好!在之前的公告中,我们向大家介绍了InterSystems官方反馈门户InterSystems Ideas! 今天想给大家介绍更多,尤其是涉及到的主题。InterSystems Ideas! 今天想给大家介绍更多,尤其是涉及到的主题。你可以按以下主题类别提交你的想法:????InterSystems Products(InterSystems产品)在这里,您...

InterSystems的博客 203
上一篇: InterSystems 最佳实践系列---APM – 监控 SQL 查询性能
下一篇: 类、表和Globals——工作原理
InterSystems
博客等级 码龄8年 272粉丝 430原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值