如何扩展大型机上的CICS安全机制?

日期: 2010-04-22 作者:Robert Crawford翻译:黄永兵 来源:TechTarget中国 英文

开箱即用的CICS在锁定资源方面做得非常好,规则是保存在非常安全的资源访问控制程序(Resource Access Control Facility,RACF)库中的,CICS负责在应用程序代码和系统代码之外执行授权检查。但可能有时候有的企业想用一种新的方式使用现有的规则,或试图保护CICS不知道的事物,因此需要对CICS的安全机制进行扩展。   使用CICS QUERY SECURITY命令   大部分外部安全管理器(External Security Manager)的调用需要授权程序设施(Authorized Programming Facility)授权,但在CICS中实现是很困难的,……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

开箱即用的CICS在锁定资源方面做得非常好,规则是保存在非常安全的资源访问控制程序(Resource Access Control Facility,RACF)库中的,CICS负责在应用程序代码和系统代码之外执行授权检查。但可能有时候有的企业想用一种新的方式使用现有的规则,或试图保护CICS不知道的事物,因此需要对CICS的安全机制进行扩展。

  使用CICS QUERY SECURITY命令

  大部分外部安全管理器(External Security Manager)的调用需要授权程序设施(Authorized Programming Facility)授权,但在CICS中实现是很困难的,大部分代码都运行在问题状态,幸好IBM为我们提供了EXEC CICS QUERY SECURITY命令访问安全服务。

  在CICS应用程序编程参考指南(Application Programming Reference Manual,APRM)中有记载,EXEC CICS QUERY SECURITY有两种基本形式,一种形式是基于系统初始表(System Initialization Table,SIT)指定的资源类别,查询CICS定义的资源(如事务,文件)的规则,另一种形式是允许程序检查任何安全规则。输出参数告诉调用者如何访问资源:ALTER(修改),CONTROL(控制),READ(读取)或UPDATE(更新)。另一个参数控制将违反安全规则的消息发给CICS作业日志。你可以关掉ICH408消息,屏蔽掉混乱的控制台输出,但我建议在程序中保留调试开关,以便在紧急关头可以启用错误消息。

  保护CICS资源

  正如前面所提到的,CICS在保护其资源方面已经做得够好了,但有时你可能想要检查用户的资源授权,让程序生成一个友好的错误消息代替ABEND或令人畏惧的“不可预测的结果”。

  例如,假设我们想在生产系统上培训一名新员工,他们可以读取文件但不能进行更新,为了使体验尽可能真实,我们检查用户的安全,看所有更新逻辑是否有授权标志。为了做到这一点,我们在事务(不是CICS)前面添加了下面的命令:

  XEC CICS QUERY SECURITY RESTYPE('FILE') RESID('CIFFILE')

  RESIDLENGTH(7) UPDATE(UPDTFLAG) NOHANDLE

  这个命令根据SIT中指定的CICS RACF规则类别检查用户的权限,事务尝试对文件CIFFILE执行I/O操作,如果执行成功,UPDTFLAG将会置CVDA(Value Data Areas)的值为UPDATEABLE或NOTUPDATEABLE,根据这个信息,应用程序可以通过事务设置开关,在事务处理过程中,每个程序都可以检查标志,看是否应该更新。当用户得到充分训练后,安全团队可以授予该员工修改简单规则的权利,APRM列出了可能的资源类型,注意,如果资源在该区域没有定义,QUERY命令很可能返回“没有找到”的错误。

  保护非CICS资源

  有时候问题不是保护CICS资源,而是它里面的一些东西,例如,一家公司希望所有销售代表都能看到所有客户记录,但要保证只有训练有素的人才可以更新客户状态,为此,我们假设每个客户记录有一个两字节的状态ID来保存客户的状态。

  下一步就是定义一个RACF类别保存资源规则,如STATECTL,假设处于STATECTL状态的有50个资源,所有销售代表都可以读取该类别的资源,但只有授权的销售代表可以更新资源的状态。

  为了检查销售代表的访问权限,应用程序应该在某些地方插入下面的命令:

  EXEC CICS QUERY SECURITY RESCLASS('STATECTL') RESID(INPSTATE)

  RESIDLENGTH(2) UPDATE(UPDTFLAG) NOHANDLE

  因此,要检查一个销售代表是否可以更新德州的客户记录,程序应该用“TX”代替“INPSTATE”,如果UPDTFLG字段返回UPDATEABLE,该销售代表就可以继续操作,否则销售代表将会看到一条错误消息,并要求他向可以更新德州客户记录,且经过培训的销售代表求援。

  为了完整起见,注意这个命令的第二种形式也可以用于检查CICS资源,例如,如果SIT参数XTRAN被设置为CICSTRN,CICS使用资源RACF类GCICSTRN检查事务授权规则,因此,为了检查一个用户的事务访问权,程序应该使用下面的命令:

  EXEC CICS QUERY SECURITY RESCLASS('GCICSTRN') RESID(TRANNAME)

  RESIDLENGTH(4) READ(READFLAG) NOHANDLE

  但这会立刻变得复杂起来,因此程序对CICS和RACF环境是敏感的。

  小结

  这些例子打破了应用程序代码安全检查的基本规则,但如果放松规定,额外的功能可能更有价值。我不知道为什么QUERY SECURITY命令没有独立到由技术支持拥有的模块中,或许是他有自己的安全保障吧。

作者

Robert Crawford
Robert Crawford

数据中心专家